永发信息网

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

答案:6  悬赏:20  手机版
解决时间 2021-03-27 13:16
  • 提问者网友:相思似海深
  • 2021-03-27 00:53
C语言中:y=++x*++x与y=(++x)*(++x)为何结果不同?
最佳答案
  • 五星知识达人网友:山君与见山
  • 2021-03-27 01:37
如果你没打错,结果是一样的;
程序1如下:
# include
main()
{
int x=5;
int a;
a=(++x)*(++x);
printf("%d",a);

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

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

程序3如下:
# include
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楼网友:轮獄道
  • 2021-03-27 05:33
我测试的结果是一样的。。。gcc编译
  • 2楼网友:往事隔山水
  • 2021-03-27 05:27
.. 楼主你是把两个句子一起执行了么 那肯定不一样 前面的计算会影响后面的结果的
  • 3楼网友:詩光轨車
  • 2021-03-27 04:09
这个就涉及到优先级的关系啦。这不带括号和带括号的优先级应该是不一样的。你可以再C语言程序运行过程中调试哦。追问现在还不太会调试。追答哦,没事,可以去找找相关资料,或者问问技术牛的同学
  • 4楼网友:过活
  • 2021-03-27 02:50
这是一个运算符号优先级的问题:‘ ++ ’ > ‘()’ > ‘ * ’。
所以:y=++x*++x相当于y=x*(x+1),y=(++x)*(++x)相当于y=(x+1)*(x+2)。追问书上“()”优先级大于“++”
  • 5楼网友:摆渡翁
  • 2021-03-27 01:53
我测试的结果是++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型结果就一样,能告诉我这是为什么吗?追答你可以去深入关心一下编译原理这门课。
其实同样的一个语句,不同的编译器展开优化是不同的。同一编译器不同版本也会有差别。

建议不要研究这些复杂的逻辑很绕人的语句,其实教材包括一些大学老师有些误导人,编写很多复杂的运算组合,让人分析结果理解运算优先级关系什么的没有太大的价值。实际编程是很反对用些复杂的运算表达式,而是要易懂易维护的语句,语言的目标实现算法,
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯