#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