turbo c中,int a =3,b=2,c; c=(a++)+(++a)+(a++) printf("%d",c)得12,

而我直接写printf("%d",(a++)+(++a)+(a++))得的却是13,高手给个详细点的解释谢谢王芬感谢... 而我直接写printf("%d",(a++)+(++a)+(a++))得的却是13,高手给个详细点的解释谢谢王芬感谢 展开
 我来答
哈宝了0d
2011-04-06 · TA获得超过113个赞
知道小有建树答主
回答量:123
采纳率:0%
帮助的人:61.3万
展开全部
c=(a++)+(++a)+(a++),这算一步,c得到这个值时a++提前做并不刷新a的值,再遇到++a刷新a的值
变成c=(a++)+(a++)+(++a),
即(a++)+(a++)之后直接a+2,所以c=3+3+(++(3+2))=3+3+6=12,所以你输入c=(a++)+(a++)+(++a),结果也是12
你可以分步做c=a++;c+=++a;c+=a++,这就和第二个答案13一样了,因为内存刷新了
如果这个式子再长一点,例如a =3;c=(a++);printf("%d",c);a =3;c=(a++)+(++a);printf("%d",c);a =3;c=(a++)+(++a)+(a++);printf("%d",c);a =3;c=(a++)+(++a)+(a++)+(++a);printf("%d",c);a =3;c=(a++)+(++a)+(a++)+(++a)+(a++);printf("%d",c);
这样你就会发现(a++)都被提前了,这是程序当初设计的问题
printf("%d",(a++)+(++a)+(a++))不难发现printf函数的代码里面刷新值比较快,也符合所学知识得到的结果,是符合逻辑语序,运算高低级的关系的,没有对错,vc也是这结果,而且到现在都没改,不用太在意
shiwenjuntx
2011-04-06
知道答主
回答量:28
采纳率:0%
帮助的人:17.5万
展开全部
这问题很变态,出这个问题的人是在拿C语言的特别开玩笑。一般的面试也不会出这个题目,这涉及到内存分配的相关知识。如果你硬要知道,不妨去理解printf的原理、运行C语言的堆栈知识,找些国外关于C语言的书看看吧,至少我觉得完全没必要理会它。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式