C | Clases de almacenamiento y calificadores de tipo | Pregunta 19 – Part 1

¿Producción? (PUERTA CS 2012)

#include <stdio.h>
int a, b, c = 0;
void prtFun (void);
int main ()
{
    static int a = 1; /* line 1 */
    prtFun();
    a += 1;
    prtFun();
    printf ( "\n %d %d " , a, b) ;
}
   
void prtFun (void)
{
    static int a = 2; /* line 2 */
    int b = 1;
    a += ++b;
    printf (" \n %d %d " , a, b);
}

(A) 3 1
4 1
4 2
(B) 4 2
6 1
6 1
(C) 4 2
6 2
2 0
(D) 3 1
5 2
5 2

Respuesta: (C)
Explicación: ‘a’ y ‘b’ son variables globales. prtFun() también tiene ‘a’ y ‘b’ como variables locales. Las variables locales ocultan las globales (consulte  las reglas de alcance en C ). Cuando se llama a prtFun() por primera vez, la ‘b’ local se convierte en 2 y la ‘a’ local se convierte en 4.
Cuando se llama a prtFun() por segunda vez, se usa la misma instancia de ‘a’ estática local y una nueva instancia de ‘b ‘ se crea porque ‘a’ es estático y ‘b’ no es estático. Entonces ‘b’ se vuelve 2 nuevamente y ‘a’ se convierte en 6.
main() también tiene su propia variable estática local llamada ‘a’ que oculta la ‘a’ global en main. La instrucción printf() en main() accede a la ‘a’ local e imprime su valor. La misma instrucción printf() accede a la ‘b’ global ya que no hay una variable local llamada ‘b’ en main. Además, el valor predeterminado de las variables int estáticas y globales es 0. Es por eso que la instrucción printf en main() imprime 0 como valor de b.
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 *