一个关于C语言中++a的问题

#include<stdio.h>main(){inta=5;inti=(++a)+(++a)+(++a);printf("i=%d\n",i);}这个结果为什么是22,... #include <stdio.h>
main()
{
int a = 5;
int i = (++a)+(++a)+(++a);
printf("i=%d\n",i);
}
这个结果为什么是22,请分析一下。
展开
 我来答
砍侃看
2016-05-12 · TA获得超过6154个赞
知道大有可为答主
回答量:6584
采纳率:69%
帮助的人:2113万
展开全部
(++a)+(++a)+(++a);

这种表达式的写法是很不好的,因为其结果是未定义的,不同的编译器得到的结果可能不一样。所以不建议这样写,而且对其讨论没有意义,因为你也不知道会得到什么答案。答案有可能是22,也有可能是24。因为都没有错。
为什么是22?
因为你的编译器是这样处理的,
首先,对a自增,a就是6
再对a自增,这时a就是7
然后相加,注意相加的不是6和7,而是7和7,因为a就是内存的一块,不可能既是6又是7,这时结果是14
再对a自增,a就是8了,然后14+8=22。
在CSDN上有个帖子是讨论这个问题的,你可以找找。讨论的结果就是,这种表达式没有任何意义。
在晴天的雨伞
2016-05-12 · TA获得超过6869个赞
知道大有可为答主
回答量:5761
采纳率:86%
帮助的人:1243万
展开全部
首先++a是在用a前就被加了,a++则是在整个语句结束之后之后加的
int a=2
“printf("%d,%d\n",a,++a);”为什么是3,3而不是2,3呢 printf是从后往前看参数的,++a,a=3,再执行输出。
“printf("%d,%d\n",++a,a);”为什么是3,2而不是3,3呢 同理,先看到a,则a=2,然后看到++a,a=3,输入。
“printf("%d,%d\n",a,a++);”为什么是2,2,而不是2,3 先看到a++,但++要再整个语句结束之后++,所以a 都输出2
“printf("%d,%d\n",a++,a);”为社么是2,2,而不是3,3 先看到a,再看到a++,但是要在语句结束之后加
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式