使用替代变量声明更改for循环的范围:

时间:2016-04-22 19:14:00

标签: c++

我试图通过测试以下三个例子来理解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有什么区别?

提前感谢您的帮助。

3 个答案:

答案 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。