Wieso kommt hier 1020 raus?

... komplette Frage anzeigen

3 Antworten

Es handelt sich um einen int-Pointer. Ein int ist 4Byte groß. Wenn du nun 5 hinzuaddierst, wird der Pointer um 5 integer-Plätze, also 20Byte, verschoben

Antwort bewerten Vielen Dank für Deine Bewertung
Kommentar von memo12344321
28.01.2016, 13:34

Vielen Dank :) ich liebe dich

0

In C werden alle Zeigeroperationen mit der Größe des Elements (auf das der Zeiger zeigt) skaliert. Der Grund ist ganz einfach: damit man leicht durch die Elemente eines Arrays (auf den man einen Zeiger hat) iterieren kann.
Dies betrifft auch ++, -- sowie Subtraktion. Bei Subtraktion zweier Zeiger wird die Differenz ebenfalls durch die Größe geteilt, so daß Du den Index-Unterschied bekommst (*). Bei vielen Maschinen ist die size-in-Byte von int gleich 4 (bei manchen auch 8). Raus kriegst Du das mit sizeof(int).

Ein Trick dies zu umgehen ist, den Zeiger auf einen anderen Typ zu casten (also so zu tun, als zeigte er auf was anderes).
Z.B. würde der Code:
printf("%d", ((char *)p) + 5);
die erwarteten 1005 ausgeben.

(*) bei Multiplikation und Division bin ich gerade überfragt - müsste ein kleines Testprogramm schreiben oder nachlesen, wozu ich aber grad keine Lust habe ;-D
Überlasse ich Dir...

Antwort bewerten Vielen Dank für Deine Bewertung

Wenn du den Stern weg nimmst, kommt 1005 heraus. Der Stern deutet an, dass du einen Zeiger definieren willst. Mit p += 5 würdest du dann die Adresse, auf die der Zeiger zeigt, verschieben, nehme ich an.

Antwort bewerten Vielen Dank für Deine Bewertung

Was möchtest Du wissen?