问题描述
请考虑以下代码段:
int numbers[9] = {5,2,78,23,8,9,3,12,97};
int arrLength = (sizeof(numbers) / sizeof(int));
for(int i = 0; arrLength; i++) {
printf("%d\n",numbers[i]);
}
我将数组长度作为循环的第二个参数,但没有为何时停止提供条件。外面给出了我数组中的9个数字,然后继续。这是程序输出的示例。以这种方式,程序可以轻松输出100多个数字。谁能解释比赛的内容?
解决方法
在这种情况下,提供了条件 。
for(int i = 0; arrLength; i++)
与
相同for(int i = 0; arrLength != 0; i++)
换句话说,控制表达式(也就是条件检查)应该取值为TRUE才能继续执行循环体。
来自C11
,第6.8.5章,P4
迭代语句使称为循环体的语句重复执行,直到控制表达式的值等于0。[...]
,脚注158,for
循环
[...]控制表达式expression-2指定在每次迭代之前进行的求值,以便继续执行循环,直到表达式比较等于0; [...]
如果未提供条件,则将其视为非零(始终为真值)。
第6.8.5.3章,第2段
子句1和expression-3都可以省略。省略的expression-2替换为非零常量。