#include<stdio.h> int main() { char *s[] = { "knowledge","is","power"}; char **p; p = s; printf("%s ", ++*p); printf("%s ", *p++); printf("%s ", ++*p); return 0; }
(A) es poder
(B) conocimiento conocimiento s
(C) es poder
(D) conocimiento conocimiento es
Respuesta: (B)
Explicación: Consideremos la expresión ++*p en la primera impresión f(). Dado que la precedencia del prefijo ++ y * es la misma, la asociatividad entra en escena. *p se evalúa primero porque tanto el prefijo ++ como * son asociativos de derecha a izquierda. Cuando incrementamos *p en 1, comienza a apuntar al segundo carácter de «conocimiento». Por lo tanto, la primera instrucción printf imprime «conocimiento».
Consideremos la expresión *p++ en el segundo printf() . Dado que la precedencia del sufijo ++ es mayor que *, p++ se evalúa primero. Y dado que es un sufijo ++, el valor anterior de p se usa en esta expresión. Por lo tanto, la segunda instrucción printf imprime «conocimiento».
En la tercera instrucción printf, se usa el nuevo valor de p (actualizado por el segundo printf), y el tercer printf() imprime «s».
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