全部问题 > 当前问题

这个程序应该怎么理解?在这个程序的源文件中,为什么说全局变量被“屏蔽

为什么这个题目的最后两个答案是34?而不是12.fun2()中并没有输出函数啊

Hello 2016-2-13 21:55:45

共 3 个回答

嘿嘿大人 2016-2-13 21:57:36

解析说的不标准,应该说是全局变量被局部变量覆盖,而不是屏蔽,你可以把屏蔽理解为覆盖

必过 2016-2-13 22:17:50

就近原则;当全局变量和局部变量以相同的形式出现时,在子函数fun1中只考虑局部变量

嘿嘿大人 2016-2-14 00:51:51

全局变量作用于没有在函数体里重新定义相同变量名的函数体中,所以fun2中和主函数中的ab都是全局变量,在fun2 中ab被新值覆盖掉,所以主函数输出的就是新值

问题来自: 形参和实参
有以下程序:
#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。