我有:
#include <stdio.h>
int main(void) {
int s,i,t[] = { 0, 1, 2, 3, 4, 5 };
s = 1;
for(i = 2; i < 6 ; i += i + 1)
s += t[i];
printf("%d",s);
return 0;
}
为什么结果是8?
我在想:
first loop: 2<6 True
i+=i+1 is 5
s=1+t[5] =>1+5=6
second loop : 5<6 True
i=5+5+2=11
s=6+t[11]???
3条答案
按热度按时间sbdsn5lh1#
循环增量表达式(在您的例子中为
i += i + 1
)出现在循环体 * 之后 *,而不是之前。所以在第一次迭代中
更一般地,任何
for
循环都可以表示为while
循环:相当于
对于您的特定情况,它是:
ycggw6v22#
我将引导您进入
for
循环reference:iteration-expression在循环体之后求值,其结果被丢弃。在求值iteration-expression之后,控制被转移到cond-expression。
在您的示例中,
i += i + 1
(我们讨论的迭代表达式)在循环体之后求值。考虑到这一点,结果将为8
ttisahbt3#
注意for循环中的第三个表达式
它是
i += i + 1
,所以在循环的迭代中,变量i
将按以下方式改变在循环的第二次迭代之后,变量
i
将已经大于6
。(i += i + 1 =〉i += 5 + 1 =〉i += 6 =〉i = 5 + 6)所以这句话
实际上得到了以下总和
其等于
8
。