概述
关于下面这行代码在codeblocks下运行的结果,我们先来预想一下。
#include<stdio.h>
int main()
{
int i = 3;
printf("%d,%d",i++,++i);
return 0;
}
i = 3,i++时先输出i的值等于3,再加1等于4;++i先加1等于5,再输出i的值等于5。那么输出的结果应该是3,5
我们是这样想的。
但是实际结果却是这样的:
这就和编译器有关。
printf函数的计算规则是从右往左,然后打印规则是从左往右。
实际上在从右往左计算时,每一次对i的计算都会有一个缓存值。
编译时,首先从右往左将i的值计算出来,然后打印时,
++/--前置的返回i本身的值;++/--后置的返回缓存区的值。
对于上面这段代码来说,++i首先计算i = i + 1 = 4,将4存入缓存区;
然后i++首先将4存入缓存区,在计算i = i + 1 = 5,最后得到i的值为5。
根据上面的规则,++i返回本身的值5,i++返回缓存区的值4
最后从左往右打印,得到结果4,5。
这样就解释了为什么得到的结果与我们想象的结果不同了。
以后在写代码时尽量避免这样无确定意义的表达式出现。
新人初次写稿,有错误的地方还请大佬们指正。
以后要多看,多写,多思考。很有精神!!!
最后
以上就是苹果雨为你收集整理的关于printf(“%d,%d“,i++,++i)的结果的问题的全部内容,希望文章能够帮你解决关于printf(“%d,%d“,i++,++i)的结果的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复