Zeiger in C verwenden

8
%Vor%

Ausgabe:

%Vor%

Ich konnte nicht verstehen, wie die *(ptr-1) auf 5 ausgewertet wurde (korrekte Ausgabe). Aber wenn ich manuell war es 1. Mein Verständnis ist *(ptr-1) wird zu *(&a+1-1) ausgewertet, was wäre *(&a) was 1 ist.

Bitte helfen Sie mir, dieses Konzept zu verstehen.

    
Angus 25.08.2011, 17:06
quelle

2 Antworten

9
%Vor%

macht &a + 1 macht &a + sizeof (a) als a ist der Typ von int [5] , was ptr auf tatsächlich a[5] (ungültig / jenseits des definierten Limits) zeigt

(ptr - 1) zeigt also auf a[4] und *(ptr - 1) druckt 5 .

    
phoxis 25.08.2011, 17:21
quelle
5

In Ihrem printf erhalten Sie den Wert in Position 1, indem Sie die Position mit +1 von 0 erhöhen.

In Ihrer zweiten Ganzzahl rufen Sie 5 ab, weil &a+1 tatsächlich über das Array hinausweist. Wenn Sie also *(ptr-1) eingeben, wird 5 zurückgegeben. Wenn Sie -1 entfernen, erhalten Sie ein wirklich seltsames Ergebnis (in meinem Fall war es -1078772784 ).

    
user195488 25.08.2011 17:11
quelle

Tags und Links