所以我想知道我是否可以在for循环的声明中声明一个变量。这段代码有效吗?
for (int a = 0;a < len + 1;a++);
a
存在于什么范围内?它会在for循环之外无效,还是我仍然可以访问它?
另外,我是否可以在单个for循环语句中声明或初始化2个变量?
for (int a = 0, b = len + 1;a < b;a++);
这是一个有效的陈述吗?
答案 0 :(得分:6)
两者都完全有效,因为for
语句的初始化部分(称为 for-init-statement )是表达式语句或一个简单声明。你的两个例子都是简单声明 - 第二个只有两个声明符。
for-init-statement 中声明的变量范围是for
循环本身,因此在for
循环之外不可用(第6.5.3节) / 3):
如果 for-init-statement 是声明,则声明的名称范围会扩展到 for-statement 的末尾。
答案 1 :(得分:2)
你可以在for循环中声明,这是正常的方法。
通常它的范围与for循环的{}一样长。
Visual Studio(不确定其他编译器)可以设置标志以将范围扩展到for循环之外。不要这样做。
您可以在for循环初始化中声明多个变量,只要它们属于同一类型。
答案 2 :(得分:1)
它在for
循环之外是无效的,因为它的作用域是for
循环,是的。是的,这也是一个有效的声明。
答案 3 :(得分:1)
两者都有效,但在这种情况下:
for (int a = 0, b = len + 1;a < b;++a);
会更快
for (int a = 0;a < len + 1;++a);
因为len + 1是预先计算的。
答案 4 :(得分:-1)
for (int a = 0;a < len + 1;a++);
如果在此语句之前没有声明“int i”,这完全没问题。
不能在 for 循环外访问“a”。
for (int a = 0, b = len + 1;a < b;a++);
这也很好不过
for (int a = 0;int b = len + 1;a < b;a++);
或
for (int a = 0;double b = len + 1;a < b;a++);
以上两种说法都无效,因为您必须将“逗号”替换为“分号”和