Code Bye

C++关于同名全局变量和局部变量的问题

代码如下
#include <iostream>
using namespace std;
int i = 43;
int main()
{
cout << “43i is ” << i << &i << endl;
int i = 1;
cout << “1i is ” << i << &i << endl;
int sum = 0;
for (int i = 0; i != 5; ++i)
{
sum += i;
cout << “0i is ” << i << &i << endl;
}
cout << i << &i << “i is ” << sum << endl;
system(“pause”);
return 0;
}
经过调试,发现三个i的地址都不一样,本人认为在局部的那两个i应该重定义,但是编译器还是通过编译,而且每个i的地址都不一样,这是怎么回事?假如想要访问for里面的那个i该怎么访问?
谢谢
解决方案

10

超过作用域的话就不存在了,想访问那么就得放到一个更大的作用域内。

10

原因是这本就是3个变量。
只不过代表的名字是同一个而已。
它们活在不同的域内,
你在一个域内,使用名字访问,只能访问到这个域内的这个名字所代表的那个变量。

40

一个声明将一个名字引进一个作用域;局部变量(通常在函数中定义)的作用域是从声明的那一点开始,直到这个声明所在的块结束为止(一个块就是由{}围起来的一段代码)。全局变量(在全部函数、类、命名空间之外定义)的作用域从声明的那一点开始,直到这个声明所在的文件的结束。与全局变量重名的局部变量可以屏蔽全局变量,假如想在块内使用全局变量需要通过作用域解析运算符::引用。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++关于同名全局变量和局部变量的问题