题目:
#include
#include
int a = 1;
void test(){
int a = 2;
a += 1;
}
int main(){
test();
printf("%d\n", a);
return 0;
}
选项:
你选啥呢,反正我选C,跟我选的一样吗,一样的话证明我们贼有缘,不一样的话就来看一下我是这么算的C:因为a=2,a+=1就等价于a=a+1,所以a=2+1=3;是不是很有道理,如果你也这么认为,那你就跟我一样完美入坑;
答案:A
哈哈哈哈哈,没想到吧,我也没想到,我做的时候特别自信地选了C,哪道题错这道题绝不会错,结果答案出来却是A;
注意代码段第三行(int a = 1;),在函数外部定义的变量为全局变量,所以a其实是全局变量,而test函数内部(int a = 2; a += 1;)的a为局部变量,在test函数内部定义的a为局部变量,局部变量与全局变量重名时,局部变量会覆盖全局变量,在test内部使用a的值时会使用局部变量的值1,a通过计算最终结果结果确实为3,但a=3只在test函数内部有效,出了test函数局部变量a=3的值就被销毁,再在主函数内部打印a的值时就会打印全局变量a的值1;
知识点:
变量的使用范围我们称其为变量的作用域
C语言中的变量,按作用域范围可分为两种,即局部变量和全局变量
局部变量:
1.局部变量,也称内部变量,是指在一个函数内部或复合语句内部定义的变量,由某对象或某个函数所创建的变量通常都是局部变量,只能被内部引用,而无法被其它对象或函数引用。
2.局部变量的生存期:从函数被调用的时刻算起到函数返回调用处的时刻结束。
3.局部变量的作用域:是定义该变量的函数或定义该变量的复合语句。也就是说,局部变量只在定义它的函数或复合语句范围内有效,只能在定义它的函数或复合语句内才能使用它们。
4.局部变量在进入语句块时获得内存,仅能由语句块内的语句访问,退出语句块时释放内存,不再有效;
5.局部变量定义后不会自动初始化,除非程序员指定初值;
全局变量:
1.全局变量也称外部变量,它是在函数外部定义的变量;几乎程序中的所有函数都能使用全局变量,它不属于哪一个函数,而是属于一个源程序文件;
2.全局变量的生存期:程序开始到程序结束。
3.全局变量作用域:是整个源程序。
4.全局变量从程序运行起即占据内存,在程序整个运行过程中可随时访问,程序退出时释放内存;
5.全局变量在程序员不指定初值的情况下自动初始化为零;
局部变量可以和全局变量重名,但是局部变量会屏蔽全局变量。在函数内引用这个变量时,会用到同名的局部变量,而不会用到全局变量;
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)