全局变量被屏蔽是什么意思?在什么情况下被屏蔽?
全局变量顾名思义,就是整个程序运行的时候都是成立可以用的,但是全局变量也有被屏蔽的时候,就是在函数中有自己重新定义的局部变量时,全局变量就会被屏蔽,比如本题中,
int a=1,b=2;//这是在定义全局变量a和b并且赋值
void fun1(int a, int b)//在fun1中定义形参时又定义了a和b,这个形参就是一个局部变量,在这个fun1函数中,里面出现的a和b就不是全局变量的a和b了;
{ printf("%d%d",a,b); }//而这句话输出的就是局部变量a和b,也就是实参的值,分别是5和6
void fun2()
{ a=3; b=4; }//在这个fun2函数中,没有重新定义a和b,所以它里面的a和b就是全局变量,所以a=3和b=4就是在给全局变量ab赋值,所以现在全局变量变成了a=3,b=4
main()
{ fun1(5,6); //调用fun1函数,将实参5和6分别传给形参也就是fun1中的局部变量a和b;
fun2();
printf("%d%d\n",a,b);/在这个主函数里面,同样没有定义局部变量,所以这里输出的a和b是全局变量,因为全局变量在fun2中改变了,所以a和b的值分别是3和4,;
}
所以本题输出的是5634
有以下程序:
#include <stdio.h>
int a=1,b=2;
void fun1(int a, int b)
{ printf("%d%d",a,b); }
void fun2()
{ a=3; b=4; }
main()
{ fun1(5,6); fun2();
printf("%d%d\n",a,b);
}
程序运行后的输出结果是 ______ 。
A. 1256
B. 5634
C. 5612
D. 3456
答案:B
解析:fun1输出的是形参a、b,所以输出56;fun2赋值的是全局变量a、b,在一个源文件中,全局变量被“屏蔽”,所以最后输出34。连在一起是5634。因此选B。