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

Scope of for loop changing with alternative variable declarations:

本文关键字:循环 范围 for alternative 变量 声明 使用      更新时间:2023-10-16

我试图通过测试以下三个示例来理解 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。可以读取或写入此变量。它一直有效到声明它的块的末尾。在这里,没有可见的此类块;在实际程序中,块是介于{}之间的代码。

for(a=1;a<3;a++) {
  cout<<a<<endl;
}

在这些行中,从第一行修改变量。它仍然是同一个变量,只是变量的值发生了变化。想象一个像一张纸这样的变量。纸张始终保持不变,只是您在上面写下不同的数字(用铅笔)并擦除它们(用橡胶胶)。

cout<<a<<endl;

由于没有相应的},变量a在这里仍然可见。


示例

3 与示例 1 的一个词不同:for循环中的int。此int是一个新的变量声明。现在您有两个名为 a 的变量。使用纸的类比,你只是抓住另一张纸,把它放在你的第一张纸上面。因此,第一张纸变得不可见。

for循环的末尾,在关闭},您拿起上一张纸(此时上面写着数字 3)并将其扔进垃圾箱。这使得外表再次出现,上面仍然写着值 15。

在示例 1 中,您在 for 循环的范围之外声明a,然后不重新声明它(即 int a )。因此,循环内外的变量a是相同的。在第一次迭代中,它是 1,然后递增到 2。它仍然满足for循环条件,因此它再次执行,然后递增到 3。现在,a 不符合for循环条件,因此它使循环的值为 3。最后,再次打印,其值为 3。

示例 2 中无法识别 a 的原因是从未在循环外部声明a。它是 for 循环的局部变量,因此不存在于该循环之外的任何范围内。

在示例 3 中,您第二次声明a,在 for 循环声明中,您说int a = 1而不仅仅是a = 1。这意味着有一个 for 循环的本地a,以及此循环之外的a,它从循环执行之前保持其值,因为它们是两个不同的变量 - 它们具有相同的名称但不同的作用域。

例 1 的解决方案:在第一个示例中,您在第一行声明了 var 'a',即在执行 for 循环之前,最初值为 15,但在 for 循环中,您将其初始化为 1,for 循环迭代两次,从而产生 1 和 2.In 第三次迭代"a"递增,因此现在 a=3,但条件失败,因为"a"不小于 3.So 最后打印 3。

例 2 的解决方案:由于变量是在 for 循环中声明的,因此它的作用域位于 for 循环本身内,因此变量在 for 循环之外无法访问。因此错误

例 3 的解决方案:Ex1 和 Ex3 之间的区别在于示例 3 中,我们有两个 'a' 的副本,一个在 for 循环之外,其值为 15,另一个在 for 循环内,其范围在 for 循环内。因此,内部 for 循环 var 'a' 结果为 1 2 作为输出,外部 var a 最终结果为 15。