pag*_*ist 5 c++ variables scope initialization lifetime
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 3; j++)
{
int n;
n++;
printf("n : %d\n", n)'
}
}
Run Code Online (Sandbox Code Playgroud)
代码的输出是1 2 3 4 5 6 7 8 9.我想知道为什么在执行变量声明时for循环中的变量n没有被初始化.
sea*_*erd 13
您永远不会将n初始化为特定值.调用时,默认情况下C++不会执行此操作int n.相反,它只保留一个整数大小的内存块.因此,当您调用时n++,程序只是抓住该内存中发生的任何值并递增它.由于你是快速连续执行此操作而不是在它们之间创建新变量,所以它恰好一遍又一遍地抓取相同的内存.正如@NicolasBuquet指出的那样,编译器优化也可能与选择相同内存块的一致性负责.
如果要为n赋值,(即int n = 1;)此行为将消失,因为特定值将写入分配给n的内存块.