c语言中为什么int i=5;p=(++i)+(++i)+(++i);printf("%d",p)的

c语言中为什么inti=5;p=(++i)+(++i)+(++i);printf("%d",p)的输出结果是22而不是21呢?6+7+8不是21吗?(程序main函数等省... c语言中为什么int i=5;p=(++i)+(++i)+(++i);printf("%d",p)的输出结果是22而不是21呢?6+7+8不是21吗?(程序main函数等省略)我用的软件是创天中文vc++,用的是c语言头文件。期待您的回答! 展开
 我来答
White_MouseYBZ
2011-10-22 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:8175万
展开全部
怎么会呢?它们是前缀增1符,先增1再运算,先做两次++i,i就成7了;从左至右计算,把前两个式子加起来放在一个临时变量中,比如A中,它就等于14;然后再与第三个式子相加,i又要增1成为8,可是这一次不能给A增了,所以是14+8=22。不过这与你使用的编译器有关,有些编译器可能会计算出24来——那是因为有些编译器先把所有的增1去做完再相加,不就是3x8=24了。所以不要用这种边缘化语法写代码。不过你的6+7+8的理解是什么样的编译器都不会做出来的,因为前缀增1是要在运算前执行,前两项中是同一个变量i,怎么做完会是一个6一个7呢?
苹果手机专家
2011-10-21 · 还没有任何签名哦
苹果手机专家
采纳数:2465 获赞数:8048

向TA提问 私信TA
展开全部
这个跟编译器有关!
在vs2008上面的运行结果竟然是24!不可思议~~
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
yorts52
2011-10-21 · TA获得超过425个赞
知道小有建树答主
回答量:261
采纳率:0%
帮助的人:168万
展开全部
不要纠结与这种无聊的问题 这种题目没有实质意义 不同编译器会有不同结果
这题出现21 22 23 24都是有可能的 你要看编译器编译后的代码才知道

写代码千万不能这么写 太牛角尖了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
恬淡又仁慈灬乖乖B
2011-10-21
知道答主
回答量:12
采纳率:0%
帮助的人:4.7万
展开全部
int 5;
p=(++i)+(++i)+(++i);
顺序的演示:
p=(++6)+(++7)+(++8); ==》 p=(++7)+15; ==》p=7+15; ==》p=22;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
MinnyCai
2011-10-21
知道答主
回答量:15
采纳率:0%
帮助的人:17.1万
展开全部
这样写比较好吧
int r, s, t;
r = ++i;
s = ++i;
t = ++i;
k = r + s + t;

因为p=(++i)+(++i)+(++i); 表达式中的三个++i的求值顺序是任意的,编译器想先做哪个就先做哪个。而每做一个,都会依赖另一个,直到分号结束,所以这个时候编译器想怎样取舍都是可以的,不管++i还是i++它都既可以取没加1之前的值也可以取加1后的值来作为++i或者i++的值,这样每次都有不同的取舍,直到分号结束,所以p的值可能有不同的情况。这个表达式违反了C语言有关顺序点的规定,编译器给出的值也具有一定的任意性,没有人能确切地告诉你它们的值, 不同的编译器可能会给出不同的值. 所以分开写比较好....
你还可以再查查1++和++1的区别:
i++与i--在参与运算的时候值被当做i
++i与--i被当做修改后的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式