全部问题 > 当前问题

为什么这题的全局变量会被屏蔽”

欧尼酱 2016-1-24 20:29:37

共 6 个回答

嘿嘿大人 2016-1-24 20:47:08

不是屏蔽,应该说是覆盖,在fun2中因为其中的a和b仍然是全局变量,所以全局变量ab的值被新值覆盖掉,让全局变量a等于了3,而全局变量b等于了4,这里的屏蔽你可以理解为是覆盖

欧尼酱 2016-1-24 20:52:43

函数值的传递 和 地址传递 怎么区别?有点分不清,这节课的视屏没讲,后面会讲吗?


欧尼酱 2016-1-24 20:53:05

回复 嘿嘿大人函数值的传递 和 地址传递 怎么区别?有点分不清,这节课的视屏没讲,后面会讲吗?

欧尼酱 2016-1-24 20:55:40

回复 嘿嘿大人:还有a,b如果是在主函数里定义的,就不会被覆盖吗?

最佳答案

嘿嘿大人 2016-1-24 21:08:15

回复 欧尼酱:a和b 如果是在主函数里面定义那么这种用法就是错误的,因为如果在主函数里面定义就是局部变量,在其他自定义函数里面就不能直接用而必须要重新定义才行;

按地址传递就是形参是数组名或者是指针,除此之外都是按值传递;

按地址传递因为形参和实参都是指向同一个地址所以形参所致的地址里面的元素发生改变那么实参所指的地址的元素也同样会变,而按值传递就是简单的一个把实参的值赋给形参,然后两者之间就无任何关系了,这在视频里面是有讲的

嘿嘿大人 2016-1-24 21:10:56

回复 欧尼酱:如果你说的是在主函数里面再定义a和b,那么在主函数里面输出的就会是在主函数里面定义的局部变量a和b,就和全局变量无关了,而全局变量a和b虽然仍旧被覆盖但是并不会在主函数的printf语句里面输出

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