2015-06-11 13 views
6

Pointers sind ein schwieriges Thema für sicher, aber ich habe über diesen Schnipsel kommen und ich kann einfach nicht herausfinden, was die p[-1] ist:Zeiger-Array in C?

#include <stdio.h> 
int main(void) { 
    int t[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }, *p = t; 

    p += 2; 
    p += p[-1]; 
    printf("%d",*p); 
    return 0; 
} 
+0

Als erstes addierst du 2 zum Zeiger p, so dass er auf 2 Adressen weiter als zuvor zeigt (also jetzt auf die Adresse von 't [2]' zeigt). Jetzt greifen Sie auf eine Adresse vor der auf, auf die sie zeigt, was dazu führt, dass sie auf die Adresse zeigt, die die "2" (oder "t [1]") enthält. – moffeltje

Antwort

9

Alle Sie Zeit einen Ausdruck wie a[b] in C zu sehen, können Sie geistig denken, dass *(a + b) passiert ist.

Also, es ist nur "der Inhalt des Elements vor dem p zeigt gerade jetzt".

Da p ist t + 2, p[-1] bezieht sich auf t[2 + (-1)] d.h. t[1].

1
p += p[-1]; 

kann als

p = p + *(p-1); 

2 An diesem Punkt p Punkte auf dem 3. Element des Arrays (Wert 3) und *(p-1) geschrieben werden.

Also, es ist äquivalent zu

p = p+2; 

und *p würde 5 drucken drucken.

+0

Awesome Jungs, danke! Das war schnell! Jetzt fühle ich mich ein bisschen dumm! Aber eine Million für die gründlichen Erklärungen! – SplineO