为什么在一种情况下有一些输出而在另一种情况下没有任何输出?
int i;
for (;i;)
{
printf("Hello ");
}
输出= 你好你好你好你好....
int i=0;
for (;i;)
{
printf("Hello ");
}
无输出
答案 0 :(得分:2)
在第一种情况下, i 未初始化,因此行为未定义。在您的情况下, i 具有非空值,并且 for 变为无止境,因为其值不会改变以产生这些打印,但是该行为仍未定义。
在第二种情况下, i 为0,所以永远不会执行 for 的正文
for (;i;)
等同于while(i)
默认情况下,变量 not 初始化为0。
如果您要编写5次实例Hello,您可以执行以下操作:
int i;
for (i = 5 ;i; --i)
{
printf("Hello ");
}
该代码与使用其他符号/运算符的代码等效,如果可以帮助您理解:
int i = 5;
while (i != 0) {
printf("Hello ");
i -= 1;
}
并在循环后添加putchar('\n');
以打印换行符也不是坏主意
答案 1 :(得分:1)
这是未定义的行为,因为i
具有自动存储期限,并且从未初始化。
这意味着访问i
处的值是未定义的行为。如果它恰好包含一个非零值,则for
循环主体将永远为true(因为循环中没有任何内容会更改i
的值)。
第二个示例使用值为零的i
显式初始化,这意味着当用作条件语句时,它将被视为false。
答案 2 :(得分:0)
i未初始化,因此在某些情况下,i包含非零数字,因此; i;是真的,因此条件始终会是真的。
如果它们是整数或字符,则始终初始化它们的值。从性能上讲,它几乎不需要您做任何事情,并且可以节省大量的工作,以后可以查找错误。
答案 3 :(得分:0)
第一个示例的行为不确定。
代码的循环部分在功能上等同于:
while (i) {
{
printf("Hello ");
}
如果i
设置为0,则执行将永远不会到达printf
。如果i
从未初始化,则可能包含任何值。如果它恰好是0,它将永远不会运行,但是如果它不为零,则循环将永远运行。