程序如下:
#include <iostream> using std::cout; using std::endl; int main(int argc, char** argv) { int i = 0, j = 2; for (int z = 2, i = j;z == 2;z++) cout << "i: " << i << endl; cout << "i: " << i << endl; }
输出
i: 2 i: 0
分析:
在for语句第一个分号前面是初始化语句,多条初始化语句用都逗号隔开,在定义同个类型的多个变量时也用逗号隔开不同的变量,那么在两种情况重叠时,结果是什么样的呢。
若按上面格式
for (int z = 2, i = j;z == 2;z++)
此时有两种猜想:
1、i为新申请的,只在for语句中有效的,语句块局部变量,用main函数中的j变量初始化它,此时它将屏蔽main函数中的i变量。
2、i为main函数中i,此处将main函数中变量j的值赋给i,main函数中的i值改变了。
这两种猜想都有根据,但是根据程序的输出,此时i被认为是一个新申请的语句块局部变量。
它屏蔽了main函数中的i,此时main函数中的i,其值不变。等for语句运行结束后,main函数中的i,还是之前的值。
时间: 2024-08-12 04:12:57