新手提问,加加i和i加加的简单问题!

saya0769 2009-12-01 03:00:28
main()
{
int i=8;
printf("%d\n%d\n",++i,i++);
getchar();
}

这个答案是:10 8

main()
{
int i=8;
printf("%d\n%d\n",i++,++i);
getchar();
}

这个答案是:9 9

为什么呢??不明白啊!
...全文
835 31 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
songyanshuai 2009-12-02
  • 打赏
  • 举报
回复
i++不能做左值,++i可以,其他的加括号就行了,没必要那么写
liujiaji 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 bobo364 的回复:]
引用 15 楼 liujiaji 的回复:
楼主稍等片刻结贴,有更好的例子:
i = 8;
printf("%d\n",++i);//此时i的值是8,先自加1,然后输出,因此输出的是9,i的值也是9.
printf("%d\n",--i);//此时i的值是9,先自减1,然后输出,因此输出的是8,i的值也是8.
printf("%d\n",i++);//此时i的值是8,这里是先输出后自加1,所以输出的是8,但i的值9.
printf("%d\n",i--);//此时i的值是9,这里是先输出后自减1,所以输出的是9,但i的值8.
printf("%d\n",-i++);//此时i的值是8,这里是先输出,注意:这里的'-'表示负号运算,因此先打印-i的值即-8,但这
//并不改变i的值,所以i自加1,所以i的值是9.
printf("%d\n",-i--);//此时i的值是9,这里是先输出,注意:这里的'-'表示负号运算,因此先打印-i的值即-9,但这
//并不改变i的值,所以i自减1,所以i的值是8.
}

希望你能明白和提高,呵呵


他所说的并不是单个i,而是多个,明白
[/Quote]
我操,我连题目都看不清奥,即把多嘴。
bobo364 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lovesi3344 的回复:]
这种帖可以说是月经贴
我建议这种问题别讨论了
根本没有答案
不同的编译器有不同的答案
而编译器也是人写的
因为编译器是人写的

[/Quote]
很好吗,天天有天天接分
bobo364 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 liujiaji 的回复:]
楼主稍等片刻结贴,有更好的例子:
i = 8;
printf("%d\n",++i);//此时i的值是8,先自加1,然后输出,因此输出的是9,i的值也是9.
printf("%d\n",--i);//此时i的值是9,先自减1,然后输出,因此输出的是8,i的值也是8.
printf("%d\n",i++);//此时i的值是8,这里是先输出后自加1,所以输出的是8,但i的值9.
printf("%d\n",i--);//此时i的值是9,这里是先输出后自减1,所以输出的是9,但i的值8.
printf("%d\n",-i++);//此时i的值是8,这里是先输出,注意:这里的'-'表示负号运算,因此先打印-i的值即-8,但这
//并不改变i的值,所以i自加1,所以i的值是9.
printf("%d\n",-i--);//此时i的值是9,这里是先输出,注意:这里的'-'表示负号运算,因此先打印-i的值即-9,但这
//并不改变i的值,所以i自减1,所以i的值是8.
}

希望你能明白和提高,呵呵
[/Quote]

他所说的并不是单个i,而是多个,明白
时刻准备中 2009-12-02
  • 打赏
  • 举报
回复
可以结贴了
yangxxxxxx66 2009-12-01
  • 打赏
  • 举报
回复
正如2楼所说,讨论这个没意义
fdget 2009-12-01
  • 打赏
  • 举报
回复
你可以认为printf()函数的执行是自右向左.
jernymy 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 lovesi3344 的回复:]
这种帖可以说是月经贴
我建议这种问题别讨论了
根本没有答案
不同的编译器有不同的答案
而编译器也是人写的
因为编译器是人写的

[/Quote]
支持
lovesi3344 2009-12-01
  • 打赏
  • 举报
回复
这种帖可以说是月经贴
我建议这种问题别讨论了
根本没有答案
不同的编译器有不同的答案
而编译器也是人写的
因为编译器是人写的
hmg25 2009-12-01
  • 打赏
  • 举报
回复
mark,以前没注意,现在学习啦
mstlq 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 bobo364 的回复:]
引用 3 楼 thefirstz 的回复:
自右向左进栈:
printf("%d\n%d\n",++i,i++);  先是输出8,然后i变为9,再++i,输出10
printf("%d\n%d\n",i++,++i);  先++i输出9,然后i++,输出9


经典的题目,终于有人说明白了,原来是堆栈原理,记得刚完c的时候,没上数据结构,不明白堆栈,只能从左到右,原来如此,学习了
[/Quote]
压栈顺序跟计算顺序没有必然联系(可以算一个压一个,也可以批量算好然后再压,依赖编译器)……
爱思考是好的,不过小心走火入魔……
liujiaji 2009-12-01
  • 打赏
  • 举报
回复
回帖就是回答别人问的问题被,就算楼主没给分,我也能有吗?是这个意思不?
zhengjiankang 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 liujiaji 的回复:]
引用 17 楼 z569362161 的回复:
跟计算顺序有关拉.
还有我只差5分就两个小三角了,能不能给5  分啊!谢谢!

不是吧,你怎么还差5分呢,刚才不是有给你5分的吗?

我想问问你,我的可用分没了,怎么才能有啊?
[/Quote]

每天回帖可得10分可用分
liujiaji 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 z569362161 的回复:]
跟计算顺序有关拉.
还有我只差5分就两个小三角了,能不能给5  分啊!谢谢!
[/Quote]
不是吧,你怎么还差5分呢,刚才不是有给你5分的吗?

我想问问你,我的可用分没了,怎么才能有啊?
z569362161 2009-12-01
  • 打赏
  • 举报
回复
跟计算顺序有关拉.
还有我只差5分就两个小三角了,能不能给5 分啊!谢谢!
caicai999 2009-12-01
  • 打赏
  • 举报
回复
虽然明白,但是以前就没有从堆栈原理来想这个问题。
liujiaji 2009-12-01
  • 打赏
  • 举报
回复
楼主稍等片刻结贴,有更好的例子:
i = 8;
printf("%d\n",++i);//此时i的值是8,先自加1,然后输出,因此输出的是9,i的值也是9.
printf("%d\n",--i);//此时i的值是9,先自减1,然后输出,因此输出的是8,i的值也是8.
printf("%d\n",i++);//此时i的值是8,这里是先输出后自加1,所以输出的是8,但i的值9.
printf("%d\n",i--);//此时i的值是9,这里是先输出后自减1,所以输出的是9,但i的值8.
printf("%d\n",-i++);//此时i的值是8,这里是先输出,注意:这里的'-'表示负号运算,因此先打印-i的值即-8,但这
//并不改变i的值,所以i自加1,所以i的值是9.
printf("%d\n",-i--);//此时i的值是9,这里是先输出,注意:这里的'-'表示负号运算,因此先打印-i的值即-9,但这
//并不改变i的值,所以i自减1,所以i的值是8.
}

希望你能明白和提高,呵呵
bobo364 2009-12-01
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 thefirstz 的回复:]
自右向左进栈:
printf("%d\n%d\n",++i,i++);  先是输出8,然后i变为9,再++i,输出10
printf("%d\n%d\n",i++,++i);  先++i输出9,然后i++,输出9
[/Quote]

经典的题目,终于有人说明白了,原来是堆栈原理,记得刚完c的时候,没上数据结构,不明白堆栈,只能从左到右,原来如此,学习了
The_facE 2009-12-01
  • 打赏
  • 举报
回复
见鬼,是谁最先研究这种东西的?
Debugcool 2009-12-01
  • 打赏
  • 举报
回复
printf的参数是后面到前面依次放到栈中的。。。。
加载更多回复(11)

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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