设x的值为5,则表达式(++x)+(++x)+(++x)的值是 24 为什么?
如题设x的值为5,则表达式(++x)+(++x)+(++x)的值是24为什么?在c语言中调试,答案的确是24,但是应该是6+7+8=21才对呀?...
如题
设x的值为5,则表达式(++x)+(++x)+(++x)的值是 24 为什么?
在c语言中调试,答案的确是24,但是应该是6+7+8=21才对呀? 展开
设x的值为5,则表达式(++x)+(++x)+(++x)的值是 24 为什么?
在c语言中调试,答案的确是24,但是应该是6+7+8=21才对呀? 展开
展开全部
根编译器有关。
VC++6.0的编译器对x=(++x)+(++x)+(++x)的算法如下:
设x=5;
则(++x)+(++x)+(++x)=((++x)+(++x))+(++x)
即先算前两个++再算+,((++x)+(++x))+(++x)就等于(7+7)+8,结果为22。
你用的编译器是先算括号里的++然后再把值加到一起。
即(++x)+(++x)+(++x)结果为8+8+8等于24。
就像pluto729这位朋友说的那样,没有什么意义的东西。倒是可以用来难倒别人。
VC++6.0的编译器对x=(++x)+(++x)+(++x)的算法如下:
设x=5;
则(++x)+(++x)+(++x)=((++x)+(++x))+(++x)
即先算前两个++再算+,((++x)+(++x))+(++x)就等于(7+7)+8,结果为22。
你用的编译器是先算括号里的++然后再把值加到一起。
即(++x)+(++x)+(++x)结果为8+8+8等于24。
就像pluto729这位朋友说的那样,没有什么意义的东西。倒是可以用来难倒别人。
展开全部
是这样的,首先执行括号里的++x
(++x)+(++x)+(++x)
所以最后x=8(x只是一个存储空间,5被6覆盖,6被7覆盖,7被8覆盖)
然后求和
8+8+8=24
编译器不同可能可能有不同答案
(++x)+(++x)+(++x)
所以最后x=8(x只是一个存储空间,5被6覆盖,6被7覆盖,7被8覆盖)
然后求和
8+8+8=24
编译器不同可能可能有不同答案
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
这应该和编译有关的,它是先把x的值算好再代进去的.
所以写的时候不要在同一个表达式中出现两次自加..或者自减..没什么意义
所以写的时候不要在同一个表达式中出现两次自加..或者自减..没什么意义
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
一个表达式同时用两个或以上的++, 这是C语言标准中未定义的行为,结果如何,靠编译器自由发挥。
和这个帖子是差不多的。
http://www.linuxsir.org/bbs/showthread.php?t=298814
和这个帖子是差不多的。
http://www.linuxsir.org/bbs/showthread.php?t=298814
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
是这样的,首先执行括号里的++x
(++x)+(++x)+(++x)
所以最后x=8(x只是一个存储空间,5被6覆盖,6被7覆盖,7被8覆盖)
然后求和
8+8+8=24
(++x)+(++x)+(++x)
所以最后x=8(x只是一个存储空间,5被6覆盖,6被7覆盖,7被8覆盖)
然后求和
8+8+8=24
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询