for循环理解问题

zhuywei123 2011-04-30 04:13:33
main()
{
int i = 0;
for (i = 0; i < 2; i++)
{
printf("%d\n",i);
}
}
这个for循环的执行过程应该怎么理解呢?
1.i = 0;
2.判断i<2;
3.打印i;
4.执行 i++;问题是执行此处的i++,应该是先取i(i 依然为0),i再++(i为1);执行完后,i的取值依然为0啊,反映在输出上应该是0,0,1;而不是0,1。
请问这样理解错误出在哪里?
...全文
161 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
waslgxl 2011-05-05
  • 打赏
  • 举报
回复
转换成WHILE语句就容易理解了
先X=0;然后再回来自加
forarrow 2011-05-05
  • 打赏
  • 举报
回复
楼主的误区在于:i++什么时候自加
1. i=0;
i++;
cout<<i; //此时输出为1

2. i=0;
++i;
cout<<i; //此时输出也为1

3. i = 0;
cout<<i++; //此时输出为0

4. i = 0;
cout<<++i; //此时输出为1

在i++或者++i执行完成后,i都是加了1的,只有在i++或者++i在执行的时候,他们才有区别,前者先计算再加1,后者先加1再计算。
ffjj56 2011-05-01
  • 打赏
  • 举报
回复
LZ for的第三个语句等于是在循环内,也就是"}"前
执行完i++本次循环结束;结束的时候i已经是1了
没调试
hnrainll 2011-05-01
  • 打赏
  • 举报
回复
for (i = 0; i < 2; i++)
{
printf("%d\n",i);
}

LZ这里的不管是i++还是++i,结果都是一样的.

这里要理解一个表达式的问题.
int i = 0;
int cp;
cp = i++; //语句一

i++;
cp = i;//语句二

好好的体会这两个语句


伊上殇 2011-05-01
  • 打赏
  • 举报
回复
经测试,输出结果为0,1。楼主不要被开始的的那个int i=0给误导,它在执行完for循环式发生改变。
xmu_才盛 2011-05-01
  • 打赏
  • 举报
回复
for (i = 0; i < 2; i++)
{
printf("%d\n",i);
}


等价于
int i = 0;
while(i < 2)
{
printf("%d", i);
i++;
}
for( 语句1; 语句2;语句3)
所以你无论是 i++ 还是 ++i, 在 语句3中 没有区别。。。

所以揣摩一下7楼得话。。。lz
疯疯癫癫 2011-05-01
  • 打赏
  • 举报
回复
9楼正解!支持
jernymy 2011-05-01
  • 打赏
  • 举报
回复

i++; // 先执行代码,后i=i+1

++i; // 先i=i+1,然后在执行代码

jianhuiqaz 2011-05-01
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20090219/22/e2df8b74-5fe4-4d1e-bace-03f1661b7618.html楼主,看下这个讨论吧,可能对你有所帮助
wangxueren 2011-05-01
  • 打赏
  • 举报
回复
先执行i=i+1,再执行i<2
SunflowerLife 2011-05-01
  • 打赏
  • 举报
回复
i=0;
i<2? true
printf("%d\n",i); 0
i++; i=1
i<2? true
printf("%d\n",i); 1
i++; 2
i<2? false
退出循环;
SunflowerLife 2011-05-01
  • 打赏
  • 举报
回复
问题是执行此处的i++,应该是先取i(i 依然为0),i再++(i为1);执行完后,i的取值依然为0啊,反映在输出上应该是0,0,1;而不是0,1。

执行打印语句后i的值是0,但执行完毕后继续执行i++,此时i的值就为1了,之后进入下一轮循环。

还有一个很严重的问题,LZ的结帖率好低诶~~
阔人 2011-04-30
  • 打赏
  • 举报
回复
对于for循环,执行i++后;在拿i的值去进行条件判断,此时i的值已经为1了。i++与++i最大的区别是在赋值的时候,所以不必过分考虑此时的情况。
zhuywei123 2011-04-30
  • 打赏
  • 举报
回复
感觉不是很具体呢
Woodz 2011-04-30
  • 打赏
  • 举报
回复
明了的回答[Quote=引用 3 楼 qq376472696qq 的回复:]

i++相当于
int f(int &i)
{int temp=i;i=i+1;return temp;}
[/Quote]
qq376472696qq 2011-04-30
  • 打赏
  • 举报
回复
i++ 执行完i加1,只不过返回值为未加前的
qq376472696qq 2011-04-30
  • 打赏
  • 举报
回复
i++相当于
int f(int &i)
{int temp=i;i=i+1;return temp;}
quwei197874 2011-04-30
  • 打赏
  • 举报
回复
"应该是先取i(i 依然为0),i再++(i为1)"---是执行完这个再printf(),所以是0,1
無_1024 2011-04-30
  • 打赏
  • 举报
回复
首先初始化i=0;在比较i<2是否成立? 比较i<2是否成立?成立i++
i=1;比较i<2是否成立?成立I++
i=2;比较i<2是否成立?不成立 跳出

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧