C | Puntero avanzado | Pregunta 3

#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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *