Speicheradressen von Pointer
-
Hallo zusammen,
ich habe eine kleine Frage zu folgendem Beispiel:int a = 5; int *ptr; ptr = &a; cout<<*ptr<<endl; //Ausgabe = 5 //Prüfen wir den Pointer cout<<ptr<<endl; //= Speicheradresse von A cout<<&a<<endl; //= Speicheradresse von A
Welche Adresse ist dann folgende?
cout<<&ptr<<endl;
-
&
ist der Adressoperator. Er liefert die Adresse einer Variablen. Was folgt daraus für&ptr
?
-
Hallo Manni,
demnach müsste das die Speicheradresse des Pointers sein, oder? Diese Frage ist wirklich eine rein theoretische ohne Praxisbezug.
-
Ja
&ptr
liefert die Speicheradresse des Zeigers.
-
Super, Danke für die Klärung!
-
@zero01 sagte in Speicheradressen von Pointer:
demnach müsste das die Speicheradresse des Pointers sein
Möglicherweise meinst du das Richtige. Es ist die Adresse der Variablen ptr. ptr ist vom Typ Zeiger auf int.
-
@zero01 sagte in Speicheradressen von Pointer:
Diese Frage ist wirklich eine rein theoretische ohne Praxisbezug.
Doch, diese Frage hat einen Praxisbezug.
-
@manni66 sagte in Speicheradressen von Pointer:
ptr ist vom Typ Zeiger auf int.
Ich frage mich gerade wieviel der Verwirrung um Pointer ausschließlich der für Anfänger gewöhnungsbedürftigen Pointer-Notation geschuldet ist. Ich kann mir gut vorstellen, dass so eine Frage vielleicht nicht aufkäme, wenn das Ding
intptr
hieße und man den&
-Operator bereits für Nicht-Pointer-Typen verstanden hat. Das ist übrigens auch der Grund, weshalb ich lieberint* a
stattint *a
schreibe. Der Typ ist schließlichint*
.
-
@finnegan
IMHO ist schlechtes Lernmaterial das größte Problem. Ein Anfänger muss von Zeigern zunächst nichts wissen. Wenn man allerdings C vor C++ lehrt und std::string für fortgeschritten hält, muss man recht früh Zeiger und dynamische Arrays einführen. Dann hat der Anfänger das Konzept der Datentypen noch nicht verstanden.
-
@finnegan sagte in Speicheradressen von Pointer:
Das ist übrigens auch der Grund, weshalb ich lieber int* a statt int a schreibe. Der Typ ist schließlich int.
Schreibst du aber int* a,b,c; sind b und c mitnichten int*, sondern int.
-
@rbs2 sagte in Speicheradressen von Pointer:
@finnegan sagte in Speicheradressen von Pointer:
Das ist übrigens auch der Grund, weshalb ich lieber int* a statt int a schreibe. Der Typ ist schließlich int.
Schreibst du aber int* a,b,c; sind b und c mitnichten int*, sondern int.
Deswegen ja auch Declare one name (only) per declaration
-
@finnegan sagte in Speicheradressen von Pointer:
Grund, weshalb ich lieber int* a statt int a schreibe. Der Typ ist schließlich int.
Nun, *a ist aber auch ein
int
.
-
@rbs2 sagte in Speicheradressen von Pointer:
@finnegan sagte in Speicheradressen von Pointer:
Das ist übrigens auch der Grund, weshalb ich lieber int* a statt int a schreibe. Der Typ ist schließlich int.
Schreibst du aber int* a,b,c; sind b und c mitnichten int*, sondern int.
Und genau deswegen macht man eine Zeile pro Variable. Problem gelöst. So einfach kann es gehen.
-
Oder man schreibt
int *a, *b, *c;
, wieGottK&R das gewollt haben.
-
This post is deleted!
-
int* a, * b, * c;
Oder so
-
Kann man natürlich so machen, aber dann isses halt Kacke
-
Das Anschneiden dieses Themas sollte als Trollen geahndet werden.
-
@hustbaer sagte in Speicheradressen von Pointer:
Und genau deswegen macht man eine Zeile pro Variable. Problem gelöst. So einfach kann es gehen
In C hat man halt zu viele Möglichkeiten, etwas falsch zu machen. C++ hat die Situation noch verschlimmbessert.
-
@rbs2 sagte in Speicheradressen von Pointer:
hat man halt zu viele Möglichkeiten
Man muss nicht jede sich bietende Möglichkeit nutzen.