C | Puntero avanzado | Pregunta 9

#include <stdio.h>
#include <stdlib.h>
  
int main(void)
{
    int i;
    int *ptr = (int *) malloc(5 * sizeof(int));
  
    for (i=0; i<5; i++)
        *(ptr + i) = i;
  
    printf("%d ", *ptr++);
    printf("%d ", (*ptr)++);
    printf("%d ", *ptr);
    printf("%d ", *++ptr);
    printf("%d ", ++*ptr);
}

(A) Error del compilador
(B) 0 1 2 2 3
(C) 0 1 2 3 4
(D) 1 2 3 4 5

Respuesta: (B)
Explicación: Las cosas importantes a recordar para manejar tales preguntas son

1) Los operadores de prefijo ++ y * tienen la misma precedencia y asociatividad de derecha a izquierda.

2)  Postfix ++ tiene mayor precedencia que los dos operadores mencionados anteriormente y la asociatividad es de izquierda a derecha.

Podemos aplicar las dos reglas anteriores para adivinar todo

*++ptr se trata como *(++ptr)

++*ptr se trata como ++(*ptr)
Cuestionario 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 *