C语言中:y=++x*++x与y=(++x)*(++x)为何结果不同?

x定义为float型,初值为1时,前者的y为9,后者为6.

如果你没打错,结果是一样的;
程序1如下:
# include <stdio.h>
main()
{
int x=5;
int a;
a=(++x)*(++x);
printf("%d",a);

}
程序2如下:
# include <stdio.h>
main()
{
int x=5;
int a;
a=++x*++x;
printf("%d",a);

}
运行结果完全一样,都是49;

程序3如下:
# include <stdio.h>
main()
{
int x=5;
int a;
a=(++x)*(++x);
printf("%d",a);
a=++x*++x;
printf("%d",a);

}
这样写的话,结果就不一样,因为在执行a=++x*++x前,x的值已经不是5,而是7了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2014-08-19
这是一个运算符号优先级的问题:‘ ++ ’ > ‘()’ > ‘ * ’。
所以:y=++x*++x相当于y=x*(x+1),y=(++x)*(++x)相当于y=(x+1)*(x+2)。追问

书上“()”优先级大于“++”

第2个回答  2014-08-19
这个就涉及到优先级的关系啦。这不带括号和带括号的优先级应该是不一样的。你可以再C语言程序运行过程中调试哦。追问

现在还不太会调试。

追答

哦,没事,可以去找找相关资料,或者问问技术牛的同学

第3个回答  2015-05-28
.. 楼主你是把两个句子一起执行了么 那肯定不一样 前面的计算会影响后面的结果的
第4个回答  2014-08-19
我测试的结果是++x*++x和(++x)*(++x)计算结果相同。
编译环境是VS2005.追问

我的编译环境是VC++6.0 x初值为1 求得前者y值为9,后者y值为6。我再试试

追答

我也是初始值给的1.
测试代码:
#include
int main (void)
{
int x=1,y=1;
printf("++x*++x=%d\n(++y)*(++y)=%d\n",++x*++x,(++y)*(++y));
getchar();
return 0;
}
输出结果都是9.

追问

不好意思,我忘记一条,x是float型的,我刚才试了,如果是Int型结果就一样,能告诉我这是为什么吗?

追答

你可以去深入关心一下编译原理这门课。
其实同样的一个语句,不同的编译器展开优化是不同的。同一编译器不同版本也会有差别。

建议不要研究这些复杂的逻辑很绕人的语句,其实教材包括一些大学老师有些误导人,编写很多复杂的运算组合,让人分析结果理解运算优先级关系什么的没有太大的价值。实际编程是很反对用些复杂的运算表达式,而是要易懂易维护的语句,语言的目标实现算法,

本回答被提问者采纳
相似回答