在下面的代码中,
#include<stdio.h>
int main()
{
int k,sum;
for(k=7;k>=0;sum=k--)
printf("%d \n",sum);
return 0;
}
输出结果为:
0
7
6
5
4
3
2
1
我想知道这个循环是如何执行的,为什么不在最后一个打印0?
答案 0 :(得分:5)
在第一次迭代sum
未初始化时。它具有不确定值。
如果没有显式初始化具有自动存储持续时间的对象,则其值为 的不确定即可。
第6.3.2.1节说在这种情况下行为未定义。
答案 1 :(得分:2)
简而言之,sum
变量更新为与k
相同。在更新之后,k
递减1,然后循环运行
这意味着......
第一个循环,sum
未初始化(因此第一个0
)
循环最后一次运行时,sum
设置为k
(1),k递减为0.循环运行。测试条件以便循环退出。
这一切都归结于此:sum=k--
。如果您要执行sum=--k
,则在将值分配给sum之前,k将递减。
答案 2 :(得分:1)
您的程序具有未定义的行为,因为它在循环的第一轮中从未初始化的变量读取(参见C11 6.3.2.1/2)。
答案 3 :(得分:1)
以下代码:
for(k =7; k >= 0; sum = k--)
//your code here printf("%d \n",sum);
可以扩展为:
k=7;
for(; k >= 0; ){
//your code here printf("%d \n",sum);
sum = k--;
}
在第一次运行中sum
未初始化,因此您的程序具有未定义的行为。
答案 4 :(得分:0)
试试这个
#include<stdio.h>
int main()
{
int k=7,sum;
for(sum=k=7;k>=0;sum=--k)
printf("%d \n",sum);
return 0;
}
循环首先取总和的初始值,在这种情况下,默认情况下等于零,因此第一次迭代显示0但是在第二次迭代初始化发生并且从7开始向前0
答案 5 :(得分:0)
当k = 1时,k的值被赋值给sum,并且它被递减为0。因此sum = 1且k = 0。 现在k = 0并且根据循环条件,k> = 0为真。因此它进入循环体并将sum的值打印为1。现在k的值被赋值给sum和k递减。因此sum = 0且k = -1。但是-1&gt; = 0为假并且循环执行停止。 因此程序最后不打印0。