C | Operadores | Pregunta 12

#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».

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 *