什么?听说你还搞不清i++和++i的区别?
哈哈哈开个玩笑,其实是因为我自己读代码写代码的过程中总是会有这样犯迷糊的时候,索性写一篇文章渡人渡己!
#include<stdio.h>
int main(){
int a=1, b=1, a_post, b_post;
a_post=++a;
b_post=b++;
printf("a a_post b b_post\n");
printf("%d %d %d %d\n",a,a_post,b,b_post);
return 0;
}
运行得到下面的结果
输出结果
究其原因,当++作为前缀时,先执行递增操作,然后进行赋值运算,于是最后得到的a_post=a;
而当++作为后缀时,先执行赋值运算(b_post=1),然后进行递增操作,递增之后b=2,所以最后得到的b_post与b不相等。
我们自己写代码的时候要尽量避免这种情况,提高代码的可读性,比如我们可以写成以下这种形式:
将递增操作与赋值操作分开进行,这样无论++是作为前缀还是后缀,最终得到的结果是一样的。
#include<stdio.h>
int main() {
int a = 1, b = 1, a_post, b_post;
++a;
a_post = a;
b++;
b_post = b;
printf("a a_post b b_post\n");
printf("%d %d %d %d\n", a, a_post, b, b_post);
return 0;
}
输出结果
代码部分参考《C Primer Plus第6版》,编译环境为Microsoft Visual Studio 2022