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