#include <stdio.h> int main() { int a[5] = {1,2,3,4,5}; int *ptr = (int*)(&a+1); printf("%d %d", *(a+1), *(ptr-1)); return 0; }
(A) 2 5
(B) Valor basura
(C) Error del compilador
(D) Fallo de segmentación
Respuesta: (A)
Explicación: El programa imprime “2 5″.
Dado que los compiladores convierten las operaciones de array en punteros antes de acceder a los elementos de la array, (a+1) apunta a 2.
La expresión (&a + 1) es en realidad una dirección justo después del final de la array (después de la dirección de 5) porque &a contiene la dirección de un elemento de tamaño 5*integer_size y cuando lo hacemos (&a + 1) el puntero se incrementa en 5* tamaño_entero.
ptr se convierte en tipo int *, por lo que cuando hacemos ptr -1, obtenemos la dirección de 5
Quiz de esta pregunta
Publicación traducida automáticamente
Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA