Hallo Zusammen, kurze Verstaendnisfrage. Damit ein Zeiger auf eine bestimmte Adresse zeigt schreibt man das mit dem adressoperator pZeiger = &variable Wenn man new verwendet, braucht man adressoperator ja nicht, weil new die Adresse einer Klasse oder variable zurueck gibt oder?
Das Problem ist, dass es ziemlich verwirrend alles ist. Habe hier als Beispiel eine Funktion, die einfach eine Liste bzw. den Inhalt davon ausgeben soll. Dazu verwende ich den Iterator i. Da es sich hierbei um Zeiger auf Objekte der Liste handelt, wird der Operator "*" verwendet. Was ich jetzt aber nicht verstehe ist, warum ich nicht mit "cout << i ;" direkt die Adresse ansprechen kann. Bei Variablen ist es auch nicht anders. Erst kommt die Zeigerdeklaration, dann wird die Adresse einer bestimmten int-Variablen dem Zeiger zugewiesen und mittels "cout << pZeiger; wird direkt die Adresse ausgegeben. Oder fungiert im Falle von listen der Iterator i direkt als Variable? Denn mittels "cout << &i;" bekomme ich die Adresse, kenne ich aber auch nur von Variablen, nicht von Zeigern ... void ZeigeListe (list<int> lListe) { list<int>::iterator i; // Iterator cout << "Anzahl der Elemente in der Liste: "; cout << static_cast<int> (lListe.size()) << endl; cout << "Inhalt der Liste: "; if (lListe.empty()==false) { for (i=lListe.begin(); i!=lListe.end(); i++) // Iterator wird wie eine Zählvariable verwendet cout << *i << ", "; // In der Liste werden keine Objekte, sondern Zeiger auf Objekte gespeichert. // Deshalb i deferenzieren, damit wir auf das eigentliche Objekt zugegriffen werden kann } else cout << "Liste ist leer"; cout << endl << endl; } // ZeigeListe
RC123 schrieb: > Dazu verwende ich den Iterator i. Da es sich hierbei um Zeiger auf > Objekte der Liste handelt, wird der Operator "*" verwendet. Ein Iterator ist kein Zeiger, sondern ein Objekt. Um den Iterator derefenzieren zu können, wird der "*"-Operator in der STL geeignet überladen. > Was ich jetzt aber nicht verstehe ist, warum ich nicht mit "cout << i ;" > direkt die Adresse ansprechen kann. Ein Objekt kann nur dann per "cout <<" ausgegeben werden, wenn eine entsprechende Überladung des "<<"-Operators existiert. Die gibt es aber für Iteratoren nicht. Es steht dir natürlich frei, selber eine passende Überladung zu schreiben. Einen Zeiger auf das entsprechende Objekt bekommst du mit
1 | zeiger = &*iterator |
Das sieht unsinnig aus, weil man von C gewohnt ist, dass sich & und * gegenseitig aufheben. In C++ ist das wegen der Überladungsmöglichkeit aber nicht immer der Fall.
Ok danke, werde mir das weiterhin anschauen. Nach 2 Stunden kann man noch nicht viel verstehen, denke mal, dass das mit der Zeit kommt. Werde erst einmal das Buch 1x durcharbeiten und dann ein eigenes Projekt erstellen, wo ich auf die unterschiedlichen Kapitel noch mal genau drauf eingehen werde.
RC123 schrieb: > Ok danke, werde mir das weiterhin anschauen. Nach 2 Stunden kann man > noch nicht viel verstehen, denke mal, dass das mit der Zeit kommt. Ja, nach ein paar Jahren gibt sich das. ;-)
Rolf Magnus schrieb: > RC123 schrieb: >> Ok danke, werde mir das weiterhin anschauen. Nach 2 Stunden kann man >> noch nicht viel verstehen, denke mal, dass das mit der Zeit kommt. > > Ja, nach ein paar Jahren gibt sich das. ;-) 21 Tage sind völlig ausreichend: http://www.geek.com/articles/chips/learn-to-program-three-weeks-20100312/ ;-P
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.