我试图通过测试以下三个例子来理解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有什么区别?
提前感谢您的帮助。
答案 0 :(得分:3)
分析你的例子1:
int a=15;
此行声明变量a
。可以读取或写入此变量。它一直有效,直到声明它的块结束。在这里,没有这样的块可见;在实际程序中,块是{
和}
之间的代码。
for(a=1;a<3;a++) {
cout<<a<<endl;
}
在这些行中,您可以从第一行修改变量。它仍然是相同的变量,它只是变量的值。想象一个变量就像一张纸。这张纸一直保持不变,只是你在上面写上不同的数字(用铅笔)并擦掉它们(用橡皮胶)。
cout<<a<<endl;
由于没有相应的}
,变量a
仍然可见。
示例3与示例1的不同之处在于:int
循环中的for
。这个int
是一个新的变量声明。现在您有两个名为a
的变量。使用纸张的类比,您只需抓住另一张纸并将其放在第一张纸上方。因此第一张纸变得不可见。
在for
循环结束时,在结束}
,你取上面的纸张(在那一点上写有数字3)并将其扔进垃圾箱。这使得外部工作表再次出现,其上仍然写有值15。
答案 1 :(得分:2)
在示例1中,您在a
循环范围之外声明for
,然后不重新声明它(即int a
)。因此,循环内外的变量a
是相同的。在第一次迭代中,它是1,然后增加到2.它仍然符合for
循环条件,因此它再次执行,然后递增到3.现在,a
不会符合for
循环条件,因此它使循环的值为3.最后,它再次打印,其值为3.
在示例2中,在循环外部无法识别a
的原因是a
从未在循环外声明。它是for
循环的局部变量,因此不存在于该循环之外的任何范围内。
在示例3中,您第二次声明a
,在for
循环声明中,您说的是int a = 1
,而不仅仅是a = 1
。这意味着a
循环有for
本地,而循环外有a
,它在循环执行之前保持其值,因为它们是两个不同的变量 - 它们具有相同的名称,但范围不同。
答案 2 :(得分:1)
针对Ex 1的解决方案: 在第一个例子中,您声明了var&#39; a&#39;在第一行,即for循环执行之前,最初值为15,然后在for循环中将其初始化为1,循环迭代两次,从而得到1和2.在第三次迭代中&#39; a&#39 ;因此增加现在a = 3但条件失败,因为&#39; a&#39;不小于3.所以最后打印3个。
针对Ex 2的解决方案: 由于变量在for循环中声明,其范围位于for循环本身内,因此变量不能在循环外部访问。因此错误
针对Ex 3的解决方案: Ex1和Ex3之间的区别在于例3中我们有两个副本&#39; a&#39;一个在for循环外,其值为15,一个在for循环内,其范围在for循环内。所以里面for loop var&#39; a&#39;结果为1 2作为输出,外部变量a结果为15。