问答题 局部变量需要“避讳”全局变量吗
【正确答案】
【答案解析】局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用操作符::。在函数内引用变量会用到同名的局部变量,而不会使用到全局变量,对于有些编译器来说,在同一个函数内可以定义多个同名的局部变量。例如,在两个循环体内都定义一个同名的局部变量,而那个局部变量的作用域就在那个循环体内。
具体来说,全局变量与局部变量的区别有以下4个方面:
1)全局变量的作用域为这个程序块,而局部变量的作用域为当前函数。
2)内存存储方式不同,全局变量分配在全局数据区,后者分配在栈区。
3)生命周期不同。全局变量随主程序创建而创建,随主程序销毁而销毁,局部变量在局部函数内部,甚至局部循环体等内部存在,退出就不存在了。
4)使用方式不同。通过声明后全局变量程序的各个部分都可以用到,局部变量只能在局部使用。
但是需要注意的是,局部变量不可以赋值为同名全局变量。程序示例如下:
#include<stdio.h>
int i=1;
int main()
{
int i=i;
printf("%d/n",i);
return 0;
}
程序输出结果:
-858993460
为什么输出的不是1而是一个随机值呢?其实上述代码合法,编译也能通过,但是不合理,int i=i,i变量从声明的那一刻开始就是可见的了,main()里的i不是1,因为它和main()外的i无关,而是一个未定义值,所以输出就是一个随机值了。