2012-04-01 6 views
2

Mögliche Duplizieren:
Pointer Arithmetic In CArray-Adresse Subtraktion in C

Code:

int main() 
{ 
    int a[ ] ={0,1,2,3,4}; 
    char c[ ] = {'s','a','n','j','u'}; 
    printf("%d\n",&a[3]-&a[0]); 
    printf("%d\n",&c[3]-&c[0]); 
    return 0; 
} 

Warum der Ausgang 3 3 für beide kommt, wenn wir den Unterschied betrachten in Adressen werden sie für beide unterschiedlich sein?

+0

Und ... was der Punkt ist das? Welche Frage stellst du * wirklich *? –

Antwort

3

In Zeigerarithmetik gibt die Subtraktion die Differenz nicht in Bytes, sondern im Zeiger-Typ zwischen zwei Zeigern zurück.

Also, da die Differenz in int s zwischen a[3] und a[0] ist identisch mit dem Unterschied in char s zwischen c[3] und c[0] - das gleiche Ergebnis für beide erhalten.

Die arithmetics für Zeiger Subtraktion ist so etwas wie:

type* p1 = ... 
type* p2 = ... 
p1 - p2 == (((int)p1) - (int(p2)))/sizeof(type)