zeiger mit new

Gast #3088640
Lesenswert?

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?
Gast #3089852
Lesenswert?

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
Moderator #3089864
Lesenswert?

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.
Persönliche Seite #3092441
Lesenswert?

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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren