Prediga la salida de los siguientes programas en C.
Pregunta 1
C
#include<stdio.h> int fun() { static int num = 40; return num--; } int main() { for(fun(); fun(); fun()) { printf("%d ", fun()); } getchar(); return 0; }
Salida: 38 35 32 29 26 23 20 17 14 11 8 5 2
Dado que num es estático en fun(), el valor anterior de num se conserva para llamadas de funciones posteriores. Además, dado que la declaración return num– es un postfijo, devuelve el valor anterior de num y actualiza el valor para la próxima llamada a la función.
Pregunta 2
C
#include<stdio.h> int main() { char *s[] = { "knowledge","is","power"}; char **p; p = s; printf("%s ", ++*p); printf("%s ", *p++); printf("%s ", ++*p); getchar(); return 0; }
Salida: conocimiento conocimiento s
Consideremos la expresión ++*p en first printf(). 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 antiguo de pse utiliza 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» .
Escriba comentarios si encuentra que alguna de las respuestas/explicaciones es incorrecta, o si desea compartir más información sobre los temas discutidos anteriormente.
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