Zeigerbeispiel
-
Hallo.
Habe folgendes Zeigerbeispiel:
int x[] = {8,1,7,2,6,3,4,18,-1,1,-2,2,-3}; int k=2; int *z = &x[5]; b = *(z+k);
Wieso ist b nach Auswertung des Ausdrucks =18?
Was wird genau gerechnet?
Wenn die Klammer zuerst ausgewertet wird, würde ja Zeiger + Inhalt gerechnet, das geht doch nicht, oder?
Gruß
seventh_son
-
seventh_son schrieb:
Wieso ist b nach Auswertung des Ausdrucks =18?
5+2 ist ? welchen Wert hat des Element mit diesem Index?
-
Oder anders: Zeiger + Zahl = Zeiger (in deinem Fall um 2 Positionen im Array weitergerückt).
-
Also es wird einfach das array x angesprochen? Was passiert denn wenn zwei oder mehr Felder deklariert sind?
Ich dachte immer, Felder lassen sich nur mit x[y] ansprechen.
-
int wert1 = *(x+7); int wert2 = x[7];
probiers mal aus
-
Ein Array ist ein zusammenhängender Bereich von Werten, ein Zeiger zeigt (grundsätzlich) auf einen einzelnen Wert. Und die Zeiger-Arithmetik basiert auf der Annahme, daß die Zeiger in die Mitte eines Arrays zeigen.
Ich dachte immer, Felder lassen sich nur mit x[y] ansprechen.
Tja, wieder was dazugelernt
-
Ah jetzt.
Sorry stand auf dem Schlauch
Die erste Antwort brachte das nicht ganz so deutlich rüber.
Trotzdem vielen Dank an alle.
-
seventh_son schrieb:
Ich dachte immer, Felder lassen sich nur mit x[y] ansprechen.
Das ist auch korrekt, nur können Arrays implizit in einen Zeiger auf das erste Element umgewandelt werden. Und mit Zeigerarithmetik ist nunmal so einiges möglich.