C++中全局变量与局部变量作用域问题
C++中定义在函数体外的全局变量有全局作用域,而定义在函数体内的局部变量的作用域则是从变量声明一直到函数结束,那么他们到底具体是什么样子的,我做了一下实验。和大家分享一下实验结果。(额,这三种情况做实验的时候是一起完成的。代码也是我再写的,如果出现错误,请读者指正)
第一种情况是只有全局变量temp
[cpp] view plaincopy

- //只有全局变量temp
- int temp = 0;
- int main(){
- std::cout << "temp 的最终值为" <<temp<<endl;//输出为 0
- temp = temp +10;
- std::cout << "temp 的最终值为" <<temp<<endl;//输出为 10
- system("pause");
- return 0;
- }
第一种情况很明显告诉我们在main可以直接被使用,而且值也可以被改变。
第二种情况在main中又定义了一个局部变量temp
[cpp] view plaincopy

- int temp = 0;
- int main(){
- int temp = 10;
- temp ++;
- ::temp ++;
- std::cout << "temp 的最终值为" <<temp<<endl;//输出为 11
- std::cout << "temp 的最终值为X" <<::temp<<endl;//输出为 1
- system("pause");
- return 0;
- }
这第二种则是告诉我们声明了全局变量temp之后,还可以在main中再声明一个局部变量temp,而且这两个temp可以被区分开来。::这个作用域操作符覆盖了作用域规则,而全局作用域本身没有名字,::左侧为空。
第三种情况
[cpp] view plaincopy

- int temp = 0;
- int main(){
- temp ++;
- std::cout << "temp 的最终值为" <<temp<<endl;//输出为 1
- for(int i = 0; i < 3; i++)
- {
- int temp = 10;
- temp ++;
- std::cout << "temp 的最终值为" <<temp<<endl;//一共输出3个11
- std::cout << "temp 的最终值为X" <<::temp<<endl;//一共输出3个1
- }
- std::cout << "temp 的最终值为Y" <<temp<<endl;//输出为 1
- system("pause");
- return 0;
- }
第三种情况告诉我们在main中的局部作用域中,再声明一个局部变量temp(暂时记为temp1),那么temp1就会占据全局变量temp的位置,即使用名字temp访问的是变量temp1。但是全局变量temp可以通过::temp的方式来访问。在这个局部作用域结束之后,即temp1的作用域结束了,那么temp1就将temp的名字还给了temp,即可以直接用temp这个名字来访问全局变量temp。
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。