小弟正在自学C++,学到了指针数组,数组指针,生命周期等等。 自己突发奇想,写了段代码跑跑。发现了奇怪的现象。
代码如下
#include <iostream>
#include <typeinfo>
#include <type_traits>
using namespace std;
int main ()
{
int a[3] = {1,2,3};
int b[3] = {};
for (int i = 0; i>=0 && i<=2; i++)
{
a[i] = a[i] + 1;
//int b[i];
b[i] = a[i];
cout << a[i] <<endl;
cout << b[i] <<endl;
}
cout << b[0] <<endl;
cout << b[1] <<endl;
cout << b[2] <<endl;
}
运行结果呢是 2 2 3 3 4 4 2 3 4
可是如果我把for循环里面int b[i]前面的注释去掉,结果如下 2 2 3 3 4 4 0 0 0
请问大大们,这是为啥?
你用int b[i]的话,那b[i]这个整体就是一个变量名,不再是数组b的第i个元素了,因此它的变化就不会引起数组b的数据改变。 所以你前面输出一句,因为b[i]还是个变量,b[i] = a[i]会修改b[i]这个函数内部变量的值,但b[0]到b[2]的数组值是不会改变的,因此最后三个输出都是初始的0值。 代码中变量使用会优先使用最近定义的生命期内的变量
for(){}里面 int b[i]; ,这里b[]的作用域就在{}内,当循环结束运行到{}外时,就是第9行定义的b[3]的作用域,所以第19 20 21行输出的是第9行定义的数组b[3].