介绍:
本篇文章灵感来源于一段代码 来看正文
正文:
大家先来看一段代码:
#include <stdio.h>
int main(void)
{
int i = 1;
printf("%d %d %d\n", i++, i++, i++);
i = 1;
printf("%d %d %d", ++i, ++i, ++i);
return 0;
}
大家认为的结果是不是
1 2 3
2 3 4
那如果是这样大家就错了 实际上的代码执行结果是这样
是不是很神奇 现在 我来给大家解读
首先 大家要记住 只要是 改变数值的代码都是右结合的 所以
printf("%d %d %d\n", i++, i++, i++);
这行代码三个i++ 应该是从右面开始读 所以第三个i++等于1 所以第三个%d 的值就是1 以此类推
还有一个点就是 像i++这样的操作 执行完都是存在缓冲区的 用的时候 从缓冲区里取出来
所以就出现了3 2 1
第二个点就像++i这个样的东西都是从 i 的地址里取值的 并没有缓冲区
所以
i = 1;
printf("%d %d %d", ++i, ++i, ++i);
先把三个++i 执行完i = 4 所以i的地址里的值就是4 所以 三个%d 都是4
懂了吧 记笔记哦
结尾:
好了 散会!!!!