Wie versteht man Zeigerarithmetik??
-
Zitatfrage schrieb:
Wutz schrieb:
Zitat verstorbener P.Struck:
"Wenn man keine Ahnung hat, einfach mal die Klappe halten."Ist das wirklich von P.Struck?
Ich glaube schon:
http://www.spiegel.de/politik/deutschland/peter-struck-die-praegnantesten-zitate-a-873892.html
-
Wutz schrieb:
Zitatfrage schrieb:
Wutz schrieb:
Zitat verstorbener P.Struck:
"Wenn man keine Ahnung hat, einfach mal die Klappe halten."Ist das wirklich von P.Struck?
Ich glaube schon:
http://www.spiegel.de/politik/deutschland/peter-struck-die-praegnantesten-zitate-a-873892.htmlDa steht aber ein Datum:
SPD-Fraktionschef Peter Struck 2007 über die Debatten in seiner Fraktion
"Wenn man keine Ahnung hat, einfach mal die Klappe halten."
Ich habe den Spruch aber schon vor 2007 gehört.
-
Da der Thread sowieso aus dem Ruder gelaufen ist: Einfach mal die Kresse halten

Wahnsinn, was geht denn hier ab - und ich les' mir nach Feierabend auch noch 10 Seiten durch

-
Bevor es untergeht:
Die Adresse einer Klasse und die Adresse des in der Klassendefinition als erstes deklarierten Members ist die gleiche. Oder wie siehst du das?
Das ist falsch, da jeder Kompiler beispielsweise den Zeiger auf die virtuelle Methodentabelle anders im Speicherbereich ablegen kann.
-
Tobiking2 schrieb:
Ein Beispiel für Zeigerarathmetik wäre
int a = 5; int *pa=&a; pa = pa+4; // Setzt pa auf pa + ( 4 * sizeof(int) )Um zum Thema zurück zu kommen.
Um was geht es bei der Anweisung
pa = pa + 4;Kann mir jemand in einem Satz sagen, auf was sich die 4 bezieht? Auf die Adresse, auf die der Zeiger pa zeigt?
Mehr wollte ich eigentlich nicht wissen... Vielleicht ist das im Laufe des Threads untergegangen...
-
silent_max schrieb:
Um was geht es bei der Anweisung
pa = pa + 4;Kann mir jemand in einem Satz sagen, auf was sich die 4 bezieht? Auf die Adresse, auf die der Zeiger pa zeigt?
Mehr wollte ich eigentlich nicht wissen... Vielleicht ist das im Laufe des Threads untergegangen...
<seufz>

Vereinfacht gesagt ist das das gleiche wie:
7 = 3 + 4;
Fazit:
Auch mit Zeigern kann man rechnen.
-
Um mal wieder zum Array zu kommen:
int a[5] = {11,22,33,44,55}; int *pa=a; // Beim Array ohne & pa = pa+4;Dann zeigt pa jetzt auf das Element 4 vom Array a. Das mit der 55 drin.
-
Programmierfachprofi schrieb:
Fazit:
Auch mit Zeigern kann man rechnen.Du kannst aber nicht zwei Zeiger addieren, weil das keinen Sinn ergibt.
Und es ist auch nicht das Gleich, da der Compiler noch die Größe des Datentyps beachtet.
-
DirkB schrieb:
Um mal wieder zum Array zu kommen:
int a[5] = {11,22,33,44,55}; int *pa=a; // Beim Array ohne & pa = pa+4;Dann zeigt pa jetzt auf das Element 4 vom Array a. Das mit der 55 drin.
Und wie kann ich auf die Adressen der restlichen Arrayelemente ermitteln?
-
In dem Beispiel ist das jetzt blöd, weil du pa schon verändert hast.
Da kommt man dann durcheinander.Darum:
int a[5] = {11,22,33,44,55}; int *pa=a; // Beim Array ohne & int i=0;pa + 1 ergibt die Adresse von a[1];
pa + 2 ergibt die Adresse von a[2];
pa + 3 ergibt die Adresse von a[3];pa + i ergibt die Adresse von a[i];
An den Inhalt kommst du mit dem Dereferenzierungsoperator *
Und *(pa+i) ist das Gleiche wie pa[i]
-
DirkB schrieb:
pa + 1 ergibt die Adresse von a[1];
pa + 2 ergibt die Adresse von a[2];
pa + 3 ergibt die Adresse von a[3];Verstehe ich das jetzt richtig:
pa + 0 ergibt die Adresse von a[0]
-
silent_max schrieb:
DirkB schrieb:
pa + 1 ergibt die Adresse von a[1];
pa + 2 ergibt die Adresse von a[2];
pa + 3 ergibt die Adresse von a[3];Verstehe ich das jetzt richtig:
pa + 0 ergibt die Adresse von a[0]Ja.
Und
pa+N ergibt die Adresse von a[N]uU ist da ein Muster ersichtlich.
-
Das kannst auch mit a selber machen:
*(a+i) ist das Gleiche wie a[i]Ein Unterschied zwischen a und pa ist, dass du pa ändern kannst, a aber nicht.
pa = a + 3; //ist ok a = a + 3; //geht nicht.
-
Und darum ging es mir die ganze Zeit während des ganzen Threads.
-
Und das wurde dir eigentlich auch schon ganz oft erklärt.
-
DirkB schrieb:
Und das wurde dir eigentlich auch schon ganz oft erklärt.
Und erst jetzt habe ich es kapiert.
-
Auch wenn das hier gerade so aussieht: Ein Array ist kein Zeiger

Da gibt es große Unterschiede.
-
Das weiß ich schon.
Bloß sind ein Array und ein Pointer nicht ein Stück weit miteinander verwandt?
-
Das Gemeinsamkeit hast du gerade kennengelernt.
Die Unterschiede zu kennen ist wichtiger!
-
DirkB schrieb:
Die Unterschiede zu kennen ist wichtiger!
Was sind denn noch die wichtigen Unterschied, abgesehen von den bisher besprochenen Unterschiede?