我试图通过测试以下三个示例来理解 for 循环的范围:
示例 1:
int a=15;
for(a=1;a<3;a++) {
cout<<a<<endl;
}
cout<<a<<endl;
此处控制台显示 1 2 3。但是,我认为它应该显示 1 2 15,因为通常情况下,for 循环内的变量 a 的范围似乎仍在 for 循环内。
示例 2:
for (int a=1; a<3; a++) {
cout<<a<<endl;
}
cout<<a<<endl;
在此示例中,编译器无法识别 for 循环后的变量 a - 正如预期的那样。那么它是如何在示例1中被识别出来的呢?
示例 3:
int a=15;
for(int a=1;a<3;a++) {
cout<<a<<endl;
}
cout<<a<<endl;
在这种情况下,控制台显示 1 2 15。这与示例 1 有什么区别?
预先感谢您的帮助。
最佳答案
分析您的示例 1:
int a=15;
这一行声明了一个变量a
。可以读取或写入此变量。它在声明它的 block 结束之前有效。在这里,没有这样的 block 可见;在实际程序中, block 是 {
和 }
之间的代码。
for(a=1;a<3;a++) {
cout<<a<<endl;
}
在这些行中,您从第一行开始修改变量。它仍然是相同的变量,只是变量的值发生了变化。想象一个像一张纸的变量。这张纸一直保持不变,只是你在上面写了不同的数字(用铅笔)并擦掉了(用橡皮糖)。
cout<<a<<endl;
由于没有对应的,变量
a
在这里仍然可见。
示例 3 与示例 1 有一个字的不同:for
循环中的 int
。这个 int
是一个新的变量声明。现在您有两个名为 a
的变量。使用纸张类比,您只需抓起另一张纸并将其放在第一张纸上。第一张纸因此变得不可见。
在 for
循环的末尾,在关闭的 处,您取出上面的纸(此时上面写着数字 3)并抛出它在垃圾桶里。这使得外层再次出现,上面仍然写着值 15。
关于c++ - 使用替代变量声明 : 更改 for 循环的范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36801661/