Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » unterschied: "." "->"

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 < [ 2 ]
000
18.08.2004, 10:57 Uhr
~jaegermeister
Gast


Kann mir jemand den Unterschied erklären?
Was macht . und was macht -> ?
Danke
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.08.2004, 11:02 Uhr
virtual
Sexiest Bit alive
(Operator)



C++:
struct Punkt
{
   int x;
   int y;
};

...

Punkt p; // p ist ein Punkt
Punkt* pp = &p; // pp ist ein Zeiger auf einen Punkt

p.x = 0; // Mit . spricht man Elemente einer Struktur direkt an.
pp->y = 1;  // Mit -> spricht man Elemenet einer Struktur über Zeiger an.


--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.08.2004, 11:09 Uhr
~jaegermeister
Gast


Danke für die Antwort. Das hab ich schon mal gehört aber wohl damals nicht verstanden.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.08.2004, 11:16 Uhr
~jaegermeister
Gast


Noch ne Frage ;D
Was ist der Vorteil beim Zeiger?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
18.08.2004, 21:39 Uhr
FloSoft
Medialer Over-Flow
(Administrator)


du kannst z.b sowas machen:


C++:
struct datensatz {
  char name[255];
  char email[255];
};

int setzedatensatz(datensatz *d)
{
  strcpy(d->name,"Test");
  strcpy(d->email,"test@domain.tld");
}

int main(void)
{
  datensatz d;
  setzedatensatz(&d);
  // hier ist nun d mit werten gefüllt, bei "einfacher" übergabe wäre dies nicht der fall
}


--
class God : public ChuckNorris { };
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
18.08.2004, 22:14 Uhr
Pablo
Supertux
(Operator)



C++:
void add(int x, int y, int resultat)
{
    resultat = x + y;
}

int main()
{
    int res=0;
    add(5,3,res);
}




Wenn du das ausführst, dann ist res immer 0. D.h. dass auch nach der Ausführung von add behält res seinen ursprünglichen Wert.


C++:
void add(int x, int y, int* resultat)
{
    *resultat = x + y;
}

int main()
{
    int res=0;
    add(5,3,&res);
}



nachdem add ausgeführt wurde, ist res==8.
Ein Zeiger ist eine Variable, dass die Adresse einer anderen Variable speichert. Der Vorteil von den Pointers ist, dass man auf die Adressen von anderen Variablen zugreifen kann, den Wert ändern usw. obwohl diese Variablen in anderen Stellen deklariert worden sind. Siehe mein zweites Beispiel. res wurde in int main deklariert, aber man kann von void add aus res ändern.
--
A! Elbereth Gilthoniel!
silivren penna míriel
o menel aglar elenath,
Gilthoniel, A! Elbereth!

Dieser Post wurde am 18.08.2004 um 22:14 Uhr von Pablo editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
18.08.2004, 23:32 Uhr
ao

(Operator)



Zitat von ~jaegermeister:
Was ist der Vorteil beim Zeiger?

Gibt keinen "Vorteil", manchmal hat man eben einen Zeiger in der Hand und nicht die Struktur selber. Dann ist pp->y ist eine vereinfachte Schreibweise für (*pp).y
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
20.08.2004, 20:44 Uhr
GERO



hi @ all

den unterschied zwichen . und -> gibt es auch bei klassen auf dem automatisch und dynamisch verwaltbaren speicher stack und heap...


Beispiel für Stack:

C++:


class CRechteck
{
     public:
          bool IstQuadrat();
          void SetzeSeiten(int, int);
    
     protected:
          int SeiteA, SeiteB;
}

void CRechteck::SetzeSeiten(int xSeiteA, int xSeiteB)
{
     SeiteA=xSeiteA; // Die Seite wird an die private Variable übergeben
     SeiteB=xSeiteB; // Die Seite wird an die private Variable übergeben
};

bool CRechteck::IstQuadrat()
{
     return(SeiteA==SeiteB) // gibt true zurück fals a==b, sonst false
};


void main()
{
     int a, b;
     CRechteck einRechteck; //Ein Objekt von CRechteck erstellen

     cout<<"Seite A"<<endl;
     cin>>a; // Eingabe Seite A

     cout<<"SeiteB"<<endl;
     cin>>b; // Eingabe Seite B

     einRechteck.SetzeSeiten(a,b); // Seitenlänge übergeben
    
     if(einRechteck.IstQuadrat())   //überprüfen ob einRechteck ein Quadrat ist
           cout<<"Das Rechteck ist ein Quadrat."<<endl;
     else
           cout<<"Das Rechteck ist kein Quadrat."<<endl;
}


In diesem Fall wird das Objekt automatisch erstellt und am Ende wieder gelöscht




Beispiel für Heap:


C++:


class CRechteck
{
     public:
          bool IstQuadrat();
          void SetzeSeiten(int, int);
    
     protected:
          int SeiteA, SeiteB;
}

void CRechteck::SetzeSeiten(int xSeiteA, int xSeiteB)
{
     SeiteA=xSeiteA; // Die Seite wird an die private Variable übergeben
     SeiteB=xSeiteB; // Die Seite wird an die private Variable übergeben
};

bool CRechteck::IstQuadrat()
{
     return(SeiteA==SeiteB) // gibt true zurück fals a==b, sonst false
};


void main()
{
     int a, b;

     cout<<"Seite A"<<endl;
     cin>>a; //eingabe seite A

     cout<<"SeiteB"<<endl;
     cin>>b; // Eingabe Seite B
    
     CRechteck* einRechteck   //zeiger auf ein CRechteck-objekt deklarieren
     einRechteck= new CRechteck;  //Speicher reservieren, und objekt erzeugen

     einRechteck->SetzeSeiten(a,b); //Seitenlängen übergeben

     if(einRechteck->IstQuadrat)   //überprüfen ob einRechteck ein Quadrat ist
           cout<<"Das Rechteck ist ein Quadrat."<<endl;
     else
           cout<<"Das Rechteck ist kein Quadrat."<<endl;

     delete einRechteck; //Rechteck Objekt zerstören
}


In diesem Fall wird das Objekt durch new erstellt und am Ende durch delete gelöscht



Ich habs net ausprobiert... aber denke trotzdem das et funzt... ich hoffe ich habs halbwegs verständlich erklährt...

Gruß Gero


Bearbeitung:

tippfehler korrigiert





Dieser Post wurde am 20.08.2004 um 22:29 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
21.08.2004, 10:53 Uhr
GERO



war nur en witz ....
Dieser Post wurde am 21.08.2004 um 10:55 Uhr von FloSoft editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
21.08.2004, 13:39 Uhr
(un)wissender
Niveauwart


Das hat nichts mit Klassen zu tun, sondern einfach, ob die Variable ein Pointer ist oder eine Referenz.
An -> und . ist also nicht magisches, sie tun das gleiche.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ]     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: