自增/自减学习

最后更新于:2022-04-01 14:28:08

在这里学习了C中的自增和自减,但是后面学习了前缀和后缀及其混合之后,发现使用不同的编译器,其中的规则是不一样的,而且平时我们书写程序的时候也不会写这样复杂的代码,例如i+++i+++i++等,这样一方面在可读性方面很差,另一方面就是在移植性方面,不同的编译器就会出现不同的结果,所以这样写是不理想的。 ~~~ #include <stdio.h> /** * 自增/自减运算的应用 * @brief main * @return */ int main(void) { int a = 5,b,c,i = 10;//变量定义及初始化 //将a赋值给b,然后自增1 b = a++; //b = 5,a = 6 //b先自增1,然后赋值给c c = ++b; //b = 6,c = 6 printf("a = %d,b = %d,c = %d\n",a,b,c); //a=6,b=6,c=6 /** * C函数参数的入栈顺序是从右向左的 * 主要是为了支持参数可变长度 * 则下面的输出为12,11,10 */ printf("i,i++,i++ = %d,%d,%d\n",i,i++,i++); /**输出i,i++,i++**/ printf("%d\n",++i); //i自增1,然后输出i 13 i=13 printf("%d\n",--i); //i自减1,然后输出i 12 i=12 printf("%d\n",i++); //先输出i,然后i自增1 12 i=13 printf("%d\n",i--); //先输出i,然后i自减1 13 i=12 printf("%d\n",-i++); //i先取负,然后输出i,最后i自增1 -12 i=13 printf("%d\n",-i--); //i先取负,然后输出i,最后i自减1 -13 i=12 /** * 有关于自增/自减问题的总结 */ /*******************/ /* 1:表达式中,一般情况下,是从左向右 */ /* 函数参数中,运算方向是从右向左 */ /******************/ /*******************/ /* 2:后缀,先取值,再自增 */ /******************/ //例子 int m = 5,n; n = m+++m+++m++; //相当于a=(m++) + (m++) + (m++); //但由于是后缀,则先取值运算之后,在进行自增 //所以 n = m + m + m; m++; m++; m++; //所以最后结果 n=15,m=8 printf("n = %d,m = %d",n,m); /*******************/ /* 3:前缀,前两个自增后取值 */ /* 后面的每个自增后都取值 */ /******************/ //例子 int p,j=5; p = ++j + (++j) + (++j); //则根据规则,前两个自增之后再取值 //则变化之后 j=7 p = 7 + 7 + (++j); //两个之后的所有前缀每一个都先自增接着取值 //则 j = 8, p = 7 + 7 +8; // p = 22, j = 8 printf("p = %d,j = %d",p,j); /*******************/ /* 4:前缀,后缀混合情况 */ /******************/ //学到这里我发现这个编译器不同,最后的结果也是不一样的,所以感觉很没有意义 return 0; } ~~~
';