2012-07-01 13 views
7

No entiendo la salida de este programa:Dirección en C: Y (número)

int arr[]={1,7,4,2,5,8}; 
int x=(&(arr[arr[1]-arr[4]])-arr); 
printf("%d" ,x); 

arr[arr[1]-arr[4]] es igual a 4. ¿Qué significa &(4)? ¿Por qué imprime 2?

Respuesta

13
arr[1] - arr[4] 

Esto es lo que parece. 7 - 5 = 2, así que vamos a sustituir eso con 2:

arr[2] 

Eso también es igual de lo que parece. 4. El & toma su dirección, que será dos int s desplazamiento desde el comienzo de la matriz, que es arr.

&(arr[2]) - arr 

que resta arr, por lo que se queda con el desplazamiento de arr[2] de arr, que es de dos int s. Ahí tienes.

Here's a reduced example.


En caso de que se esperaba que fuera 8, bueno, eso es sólo la forma en la aritmética de punteros es. De reparto a los dos a unsigned int:

(unsigned int)&arr[2] - (unsigned int)arr 

rendirá 8, al menos cuando un int es de cuatro bytes. (Demo)

5

Mire la respuesta de minitech para mostrar cómo se puede deducir el valor de impresión de "2".

Sin embargo, creo que en su caso simplemente no entendió cómo funciona el operador &. Sí, arr[arr[1]-arr[4]] es 4, pero eso no significa que &(arr[arr[1]-arr[4]]) está haciendo &4; está haciendo &(arr[2]); y está tomando la dirección de arr[2], no el valor de arr[2], que es 4.

Cuestiones relacionadas