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,高手给个详细点的解释谢谢王芬感谢
展开
2个回答
展开全部
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也是这结果,而且到现在都没改,不用太在意
变成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也是这结果,而且到现在都没改,不用太在意
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询