C语言自增自减运算 恶心的问题

c语言中,自增(++)和自减(–-)运算是很有c语言特色(恶心)的一种运算符。

可以按教科书那种记:
b = a++ 是先赋值后运算,即先 b=a,然后 a++。
b = ++a 是先运算后赋值,即先 ++a,然后 ++a。

例子:
在这里插入图片描述

好好想一下即可。

注意结合性,从右边到左边。

自增:后缀:同表达式中Turbo C的情况相同:先统一取值后依次自增,如:

int a,i=5; a=i+++i+++i++;a=15, i=8.

1、 在一般表达式中和在函数参数中计算的结果相同(这一点与TurboC环境不同);

2、 后缀:同表达式中Turbo C的情况相同:先统一取值后依次自增,如:

int a,i=5; a=i+++i+++i++;a=15, i=8.

3、 前缀:前两个自增同Turbo C,即依次自增后统一取值,后面的每个自增后即

取值,如:

int a, i=5; a= ++i+(++i)+(++i); a=22, i=8.

4、 前后缀混合的情况:

(1) 一般情况:表达式中自左向右计算,参数自右向左运算。前缀自增后取值;后缀(或变量)取值依其所处位置而定,有连续多个将统一取值,其自增在语句结束前进行。

(2) 前后缀各有一个的情况:设int i=5; 由于i++++i应满足交换率与++ii++相同,规定按后者计算故为36。实验2内容4:int i=5;printf("%d,%d\n", --i, i++*++i ); 打印5,36。

(3) 若i++或++i或两者有多于一个的情况:++i有两个以上在一起时最左边的连续自增同3、,其余每个自增后取值,如:int i=5;

printf("%d\n%d\n",–i,(++i)+(i++)+(i++)+(++i));打印6和25

解释:i++的语句的加是在;后才加的
不妨再在下面打行(i)的输出代码,i是8!!!!
后缀(或变量)取值依其所处位置而定,有连续多个将统一取值,其自增在语句结束前进行。

printf("%d\n%d\n",–i,(++i)+(++i)+(++i)+(++i)+(i++));打印8和40

printf("%d\n%d\n",–i,(++i)+(++i)+(++i)+i+(++i)+(++i)); 打印9和49

(4) 函数参数中有括号时,括号参数优先计算,其余参数仍自右向左计算,如:

int i=9,j=8;printf("%d %d\n", (++i, j–), ++i); 打印8 11

printf("%d %d%d\n", (++i, j–), ++i, i); 打印8 11 10

(5) 最后i的值等于原值加总自增次数减自减的次数.

猜你喜欢

转载自blog.csdn.net/qq_43504939/article/details/89095833
今日推荐