请教(++x)*(++x)*(++x)问题

量子人生 2010-10-05 09:16:55
代码(在dev中编写):
#include <stdio.h>
#define CUBE(x) ((x)*(x)*(x))
main(){
int x,y,z,s;
x=5;
y=CUBE(++x);
x=5,z=1;
int i;
for (i=0;i<3;i++)
{
z*=(++x);
}
x=5;
s=(++x)*(++x)*(++x);
// printf("x is %d\n",x);
printf("y is %d\n",y);
printf("z is %d\n",z);
printf("s is %d\n",s);
system("pause");
}
结果:
y is 392
z is 336
s is 392
请按任意键继续. . .

希望大家给出解释。s按照一本参考书期望的值应该是8的立方。感觉y应该与z的值一样,为什么会出现这种结果。
...全文
177 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
jhangverita 2010-10-05
  • 打赏
  • 举报
回复
不要出现(++x)*(++x)*(++x)这样的式子。
乘法a*b的计算顺序是不确定的,依赖于编译器。不确定先计算a的值或是b的值。
所以表达式的子表达式同时改变某值时,计算结果是不确定的。

量子人生 2010-10-05
  • 打赏
  • 举报
回复
呵呵,新手。那学C应该放眼于什么呢。总以为这些是基础,摆弄不清学不好[Quote=引用 2 楼 delphiwcdj 的回复:]

请不要这样写
[/Quote]
量子人生 2010-10-05
  • 打赏
  • 举报
回复
嗯,谢谢。就是以为这是一个较为常识的问题,自己不知道不代表都不知道。或许别人一句话就给点醒了呢[Quote=引用 5 楼 yangsen600 的回复:]

没必要在这种问题上浪费时间。写的时候注意规范一点就ok了。
[/Quote]
harderman 2010-10-05
  • 打赏
  • 举报
回复
又见此类贴
千杯不醉-sen 2010-10-05
  • 打赏
  • 举报
回复
没必要在这种问题上浪费时间。写的时候注意规范一点就ok了。
量子人生 2010-10-05
  • 打赏
  • 举报
回复
为什么啊,我知道宏不该这么写。但s这么写也不对吗?
小魔菇 2010-10-05
  • 打赏
  • 举报
回复
不要玩这个了 实际意义不大
delphiwcdj 2010-10-05
  • 打赏
  • 举报
回复
请不要这样写
Csuxiaowu 2010-10-05
  • 打赏
  • 举报
回复
。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

69,368

社区成员

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

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