decir que tenemos el siguiente código:C dirección de gama confusión
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;
}
Cuando compilan y ejecutan los resultados son de la siguiente manera:
E: 0xbf8231f8
&E[2]: 0xbf823200
&E[2]-E: 0x2
entiendo el resultado de & E [2] cuales es 8 más la dirección de la matriz, ya que está indexada por 2 y de tipo int (4 bytes en mi sistema de 32 bits), pero no puedo entender por qué la última línea es 2 en lugar de 8.
Además, ¿qué tipo de la última línea debería ser: un entero o un puntero entero?
Me pregunto si es el sistema de tipo C (un poco de fundición) lo que hace esta peculiaridad?
Esto es casi un duplicado del http://stackoverflow.com/questions/759663/pointer-arithmetic-in-c – finnw
¿Qué hay de printf ("E: 0x% x \ n", &a); – dashesy