c语言(a++)+(a++)+(a++)和(++a)+(++a)+(++a)

第一种我上机试过答案是12,第二种是15,这是为什么呢?求解,详细点啊~a的初值是3... 第一种我上机试过答案是12,第二种是15,这是为什么呢?求解,详细点啊~
a的初值是3
展开
 我来答
White_MouseYBZ
2013-10-15 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6282万
展开全部
a=3时,(a++)+(a++)+(a++)=9毫无疑问。
(++a)+(++a)+(++a)有点情况:有些编译器解释先算3个++a,再加起来,就为18;而有的编译器却先把前两个算出来为10赋给一个中间变量,再算最后一个++a为6,再把二者加起来等于16。
更多追问追答
追问
我用的是xcode 算到的就是12和15啊 这是为毛!!!
追答
如果操作无误的话,你那编译器的解释显然不符合C关于前++后++的基本规定。显然是一项一项解释的,前者3+(3+1)+(4+1)=12,后者(3+1)+(4+1)+(5+1)=15。C规定,表达式中的前++在变量参与运算前求出,后++在变量参与运算后求出。所以你的编译器的解释不符合这个元规定。不过这种边缘化语句C没有统一规定到底如何解释,所以你的编译器的开发者或许也有解释的理由。尽管你已采优了,但说两句无妨……
478617
2013-10-15 · TA获得超过875个赞
知道小有建树答主
回答量:725
采纳率:100%
帮助的人:79.5万
展开全部
++a是在用变量a前将变量a增加1,
a++是在用变量a后将变量a加1,所以
(a++)+(a++)+(a++)比(++a)+(++a)+(++a)的结果少3。。。

可以这么翻译这段语句:
sum=0;
a=3
(++a)+(++a)+(++a)
翻译过来就是
a=a+1;
sum = sum+a;//a=4
a=a+1;
sum = sum+a;//a=5
a=a+1;
sum=sum+a;//a=6
结果就是4+5+6 =15

(a++)+(a++)+(a++)

翻译过来就是
sum=sum+a;//a=3
a=a+1;

sum=sum+a;//a=4
a=a+1;
sum=sum+a;//a=5
a=a+1;
结果就是3+4+5 =12
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f3b3e02
2013-10-15 · TA获得超过2155个赞
知道小有建树答主
回答量:821
采纳率:90%
帮助的人:570万
展开全部
a=3时,
因为a++是变量a先参与其他运算再加1,所以(a++)+(a++)+(a++)实际上是3+3+3=9,运算后a的值是6.
++a则是先求a=a+1,然后再做其他运算,所以(++a)+(++a)+(++a)实际上是5+5+6=16,运算后a的值是6.
追问
为什么是5+5+6??
追答
自加连加运算,是从右向左,先算后两个++a然后相加,就是5+5=10,然后再做一个++a,就是再加6
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
鬼魅de笑很低调
2013-10-15
知道答主
回答量:4
采纳率:0%
帮助的人:2.7万
展开全部
a初值是多少
更多追问追答
追问
抱歉 忘了写 初值是3
追答
#include
main()
{
int a=3,b,c;
b=(a++)+(a++)+(a++);
printf("%d\n",b);
}我运行了一下是9
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式