我是靠谱客的博主 苹果雨,最近开发中收集的这篇文章主要介绍关于printf(“%d,%d“,i++,++i)的结果的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

关于下面这行代码在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)的结果的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(19)

评论列表共有 0 条评论

立即
投稿
返回
顶部