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

标签 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 有什么区别?

预先感谢您的帮助。

最佳答案

分析您的示例 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/

相关文章:

c++ - PCL 库基本项目返回 abort 已被调用

c++ - __NULL_IMPORT_DESCRIPTOR 在 boost_system 和 boost_filesystem

c++ - 尝试在 cpp 中打印 n 维数组

c++ - C++ VS 2010 OpenCV 中 FindFirstFile 参数的 Concat 命令行参数

c++ - OpenCV 程序无法在 Visual Studio 2010 上编译

c++ - 指向成员函数的指针解析

c++ - 在桌面应用程序中托管 Metro 应用程序

c++ - 使用 SSE 和 STL vector 计算平均值

c++ - qt creator 中有很多 undefined reference

c++ - Visual Studio C++ 过滤代码