#include "stdio.h" main() { int a=5,b=-3,c=4; printf("%d%d\n",(++a,b++),c-2); } 用vc编译结果是-32,

但是资料书上的答案是-22,不知道是哪个错了,请高人帮忙求解一下。。。另外,还有一点到现在还是很模糊的是a++是先自动加1的,什么时候a++是先不自动加1,过会儿再自动加... 但是资料书上的答案是-22,不知道是哪个错了,请高人帮忙求解一下。。。另外,还有一点到现在还是很模糊的是a++是先自动加1的,什么时候a++是先不自动加1,过会儿再自动加1的。。。O(∩_∩)O谢谢 展开
 我来答
匿名用户
2012-05-05
展开全部
我测试结果也是-32,书上错的。
int a=5,b=-3,c=4;
printf("%d%d\n",(++a,b++),c-2);
执行这个语句时,printf是一个C自带的方法,我们可以假设它的定义为:
void printf(char[] formater,args[]); 所以调用printf时:可以这样理解上面语句:先计算参数的值
formater="%d%d\n";
args[1]=(++a,b++); //其结果是args[1]=(++a,b++)=5++,(-3)--=(-3)--=-3;
args[2]=c-2; //其结果是args[2]=c-2=4-2=2;
再输出结果:printf(formater, args[1], args[2]);
计算完后,再执行输出,最后调用的相当于是 printf("%d%d\n",-3,2); 故答案应该是-32。

i++和++i的运算,下面这两个例子给你对比理解。
int a=0,b;
b=a++;
printf("a=%d,b=%d",a,b);
输出结果为:a=1,b=0
int a=0,b;
b=++a;
printf("a=%d,b=%d",a,b);
输出结果为:a=1,b=1
xxcc309
2012-02-02 · TA获得超过409个赞
知道小有建树答主
回答量:403
采纳率:0%
帮助的人:330万
展开全部
这种问题和编译器有关的,不同的编译器优化的方式不一样,结果也不一样,不用纠结这类问题,实际工作中绝对不会遇到,至于前置++和后置++你可以看下书,自己理解了才能灵活运用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SpectreD
2012-02-02
知道答主
回答量:8
采纳率:0%
帮助的人:11.7万
展开全部
书错了 ++a是执行这条语句前a自加一 a++是执行完这条语句后自加一
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友28b4182
2012-02-02 · TA获得超过7218个赞
知道大有可为答主
回答量:4847
采纳率:100%
帮助的人:1770万
展开全部
printf("%d%d\n",(++a,b++),c-2);
这里有两个%d第一个是取第一个括号里的b++的值,第二个是取c-2的值
(++a,b++)这个括号里面是取b++的值,因为++在后所以是先取b然后再加加
这样的话是取-3
c-2是2所以结果是-32
追问
我和你想的是一样的,但是我现在就是纠结b++什么时候就直接等于-2了,能举个例子帮我把b++什么时候是-3,什么时候是-2区分一下,谢了。。。
追答
VC是对的吧,如果真的答案不一样的话只能是说编译器不一样啊.毕竟你现在也说了VC结果出来是-32.书上也有错误的,这种变态的写法只是要考试的时候遇到的,纸上谈兵,没必要这么深究吧,知道有这么回事就行了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式