Frage zu Zeigern

touristguy

Mitglied
Hallo ich habe folgenden Code:

Code:
	int a[ ]= {-1,0,1}, *iP,*kP;
	iP= a;
	kP= iP+2;
	*iP++ = 2;
	*iP++ = 3;
	printf("%d %d %d %d\n", *iP, a[0], a[1], *kP-1);
jetzt soll ich hier bestimmen was am Ende angezeigt wird, jedoch habe ich noch ein Problem die Zeile 4 & 5 zu verstehen. Wird in dieser Zeile zuerst der Zeiger dereferenziert der Wert um 1 hochgezählt und dann = 2 gesetzt?
Vielen Dank schon mal, auch wenn es ein triviales Problem ist, bringt mich aber langsam zu verzweifeln.

Gruß Phil
 
Hallo,
meines Wissenstandes nach wird erst der Wert zugewiesen, und anschließend der Zeiger weitergesetzt. Würdest du "++(*iP) = 2;" schreiben, würde erst der Zeiger inkrementiert, und anschließend der Wert auf 2 gesetzt.
Ich hoffe ich konnte helfen.

Grüße, random.
 
C++:
int a[ ]= {-1,0,1}, 
int* ptr_first = a;
int* ptr_last = a + 2;

*ptr_first++ = 2;
*ptr_first++ = 3;

C++:
a[] = { 2, 3, 1 };
*ptr_first = 1;
*ptr_last - 1 = 3;
Nja Ausgabe sollte sein:
Code:
1 2 3 3
 
Vielen Dank für den Beitrag, ich glaube ich habe es soweit verstanden. d.h. ja dass mein zeiger zuerst dereferenziert wird, der Wert auf den er zeigt wird dann zu 2 und anschließend wird er um 1 nach oben gezählt. Das bedeutet auch, dass das ++ nach dem *iP erst am Ende der Zeile ausgeführt wird oder?

Gruß Phil
 
ja,
du veränderst mit dem ++ hinter dem zeiger die Adresse.
(also er wird x bites weitergesetzt, wobei x der Größe des Datentyps, von dem der Zeiger ist, entspricht.)

Grüße, random.
 
Nja. Du verschiebst die Adresse um die Größe des Zeigertypes. Vllt. solltest du dir mal den Unterschied von Post und Pre-Inkrement zu gemühte führen :D
 
Hi.
Vielen Dank für den Beitrag, ich glaube ich habe es soweit verstanden. d.h. ja dass mein zeiger zuerst dereferenziert wird, der Wert auf den er zeigt wird dann zu 2 und anschließend wird er um 1 nach oben gezählt. Das bedeutet auch, dass das ++ nach dem *iP erst am Ende der Zeile ausgeführt wird oder?
Nein. Das Postinkrement wird zuerst ausgeführt. Der Postinkrement-Operator gibt aber noch den alten Wert des Zeigers zurück, der dann dereferenziert wird und somit wird noch die alte Stelle des Zeigers verändert, obwohl dieser bereits geändert wurde.

Wenn man sich nicht sicher ist, besser explizit klammern:
C:
(*(ptr_first++)) = 2;
Gruß
 
Zurück