pointeraufgabe
-
Habe hier eine Aufgabe. Ich soll die Belegung der Variablen nach jeder Zeile darstellen. Nach der letzten Zeile wird aus dem letzten Arrayelement eine 0 (vorher ja 3). Warum?
int a[]={1,2,3};
int *p1,*p2,**pp;p1=a;
p2=&a[1];
p1++;
pp=&p1;
(*pp) [1] -= *p2 +* (*pp-1);
-
Anfangs zeigt p1 auf a[0], wird dann um 1 erhöht, zeigt also auf a[1]. Dann zeigt pp auf p1. Also ist (*pp) das gleiche wie p1, welches auf a[1] zeigt. Demnach ist (*pp)[1] das gleiche wie p1[1] und das ist a[2].
Warum die rechte Seite 3 ist, darfst du dir selber zusammenreimen, das Vorgehen ist ähnlich.
-
ja kommt das dann von p++, dass p1 dann auf a[2] zeigt?
-
Warum die rechte seite 3 ist, ist mir jetzt klar, aber warum ist p1[1] dann a[2]?
-
floriandarter schrieb:
Warum die rechte seite 3 ist, ist mir jetzt klar, aber warum ist p1[1] dann a[2]?
Weil
foo[N]eine andere Schreibweise für*(foo + N)ist. Wenn p1 auf a[1] zeigt, was ist dann p1[1]?
-
achso p1[1] ist a[2].
dann wäre p1[-1] a[0], richtig ?
-
Genau.