全部问题 > 当前问题

为啥不选C啊?

Q雅 2015-9-5 20:09:38

共 9 个回答

嘿嘿大人 2015-9-5 20:20:25

a与b是全局变量

fun1中a,b用的是局部变量(函数定义形参时定义的),调用fun1(5,6)输出了5和6

fun2中a,b用的是全局变量,在fun2中对a与b重新赋值了,所以回到了主函数之后,ab没有重新定义,所以也是用的全局变量所以a与b输出为3和4

Q雅 2015-9-5 22:23:48

回复 嘿嘿大人:fun1中的int a就是相当于在fun1函数内部重新定义了a,所以才是局部变量的吗?然后fun2是因为小括号里没有定义形参,所以fun2中a,b用的才是全局变量?

嘿嘿大人 2015-9-5 22:27:38

回复 Q雅:可以这么理解,局部有定义变量就肯定用局部变量,没有才会用全局变量

Q雅 2015-9-5 23:06:54

回复 嘿嘿大人:但是我还有一个疑问,fun1中5,6局部变量只是暂时屏蔽了全局变量,fun2中3和4不也应该是暂时屏蔽1,2的吗?在main函数里面不应该还是输出全局变量吗?sorry,我的问题太多了,辛苦你了

最佳答案

嘿嘿大人 2015-9-5 23:17:55

回复 Q雅:在fun2中改变的就是全局变量,所以主函数中输出的全局变量就是改变后的全局变量啊,不用去想什么屏蔽不屏蔽的,当作普通的变量去一步一步走就行了,main函数中本来就是输出的全局变量,fun2里面不是屏蔽全局变量,而是重新赋值给全局变量

Q雅 2015-9-5 23:24:06

回复 嘿嘿大人:这样啊,那就是因为fun2中全是全局变量所以全局变量的值被改变了,main函数输出的全局变量就变掉了?

嘿嘿大人 2015-9-5 23:24:43

回复 Q雅:是这个意思的,嘿嘿


Q雅 2015-9-5 23:25:37

回复 嘿嘿大人:啊啊啊啊,你太好了,太有耐心了,谢谢谢谢谢谢谢O(∩_∩)O谢谢

嘿嘿大人 2015-9-5 23:26:05

回复 Q雅:不用谢,加油吧,嘿嘿

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