Considere los siguientes dos programas C:
P1:
int main() { int (*ptr)(int ) = fun; (*ptr)(3); return 0; } int fun(int n) { for(;n > 0; n--) printf("GeeksQuiz "); return 0; }
P2:
int main() { void demo(); void (*fun)(); fun = demo; (*fun)(); fun(); return 0; } void demo() { printf("GeeksQuiz "); }
¿Cuál de las siguientes opciones es la correcta?
(A) P1 imprimió “GeeksQuiz GeeksQuiz” y P2 imprimió “GeeksQuiz GeeksQuiz”
(B) P1 imprimió “GeeksQuiz GeeksQuiz” y P2 da error de compilador
(C) P1 da error de compilador y P2 imprimió “GeeksQuiz GeeksQuiz”
(D) Ninguno de los
Respuesta anterior : (C)
Explicación: P1: El único problema con el programa es que la diversión no se declara/define antes de asignarlo a ptr. El siguiente programa funciona bien e imprime «GeeksQuiz GeeksQuiz GeeksQuiz»
int fun(int n); int main() { // ptr is a pointer to function fun() int (*ptr)(int ) = fun; // fun() called using pointer (*ptr)(3); return 0; } int fun(int n) { for(;n > 0; n--) printf("GeeksQuiz "); }
P2: Este es un programa simple con punteros de función. La diversión se asigna para apuntar a la demostración. Así que las dos declaraciones “(*diversión)();” y diversión();» significar lo mismo.
La opción (C) es correcta.
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