printf与cout的问题

奥利奥小新 2012-04-16 12:52:26

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

return 0;


}


void main()
{
int i=2;
cout<<i++<<++i<<i<<i++<<endl;
cout<<i<<endl;
}

谁能来详细解释下以上两段代码输出什么吗,为什么会这样输出,求指导!
...全文
183 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
fjweigege 2012-04-24
  • 打赏
  • 举报
回复
前++直接改变变量的值;后++先生成一个中间变量,将原来的值放在中间变量中,然后变量的值加1,所以i++的值为中间变量的值,即原来变量的值而++i的值为i+1的值。
loongee 2012-04-16
  • 打赏
  • 举报
回复
日经贴,请楼主参看文章解释:


[Quote=引用 1 楼 的回复:]

http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?14383


每天都有人问...
[/Quote]
evencoming 2012-04-16
  • 打赏
  • 举报
回复
典型的未定义行为。
参考下面链接中的文章:
C,C++表达式求值顺序 裘老的解释
惬意 2012-04-16
  • 打赏
  • 举报
回复
无论是前缀形式的自增还是后缀形式的自增其操作数的值都加了1。
前缀形式:表达式的值是自增之后的值,也就是操作数的值
后缀形式:首先把操作数的值拷贝,然后再将操作数的值加1,但是表达式的值是之前拷贝值
鱼珊珊 2012-04-16
  • 打赏
  • 举报
回复
不同的编译器有不同的答案。
鱼珊珊 2012-04-16
  • 打赏
  • 举报
回复
不同的编译器有不同的答案。
cnfixit 2012-04-16
  • 打赏
  • 举报
回复
日经贴
goldbeef 2012-04-16
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

日经贴,请楼主参看文章解释:


引用 1 楼 的回复:

http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?14383


每天都有人问...
[/Quote]++
pathuang68 2012-04-16
  • 打赏
  • 举报
回复
不要在同一个表达式中使用++或--超过一次,这样的行为会随着编译器的改变而改变。

换言之,这样的问题没有意义。
iamnobody 2012-04-16
  • 打赏
  • 举报
回复
http://topic.csdn.net/u/20110826/09/601ebe9c-c2ae-4d63-a4e2-506c618bb654.html?14383


每天都有人问...

69,371

社区成员

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

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