Say abbiamo il codice seguente:C indirizzo matrice confusione
int main(){
int a[3]={1,2,3};
printf(" E: 0x%x\n", a);
printf(" &E[2]: 0x%x\n", &a[2]);
printf("&E[2]-E: 0x%x\n", &a[2] - a);
return 1;
}
Quando compilate ed eseguite i risultati sono seguenti:
E: 0xbf8231f8
&E[2]: 0xbf823200
&E[2]-E: 0x2
comprendo il risultato di & E [2] cui è 8 più l'indirizzo dell'array, poiché indicizzato da 2 e di tipo int (4 byte sul mio sistema a 32 bit), ma non riesco a capire perché l'ultima riga è 2 anziché 8?
Inoltre, che tipo di l'ultima riga dovrebbe essere - un numero intero o un puntatore intero?
Mi chiedo se è il sistema di tipo C (un tipo di fusione) che fa questo capriccio?
Questo è quasi un duplicato di http://stackoverflow.com/questions/759663/pointer-arithmetic-in-c – finnw
Che dire printf ("E: 0x% x \ n", &a); – dashesy