日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

为自增(++)自减(--)运算符正名

發布時間:2025/3/15 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为自增(++)自减(--)运算符正名 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

學過C語言的朋友,相信你對“++i”,“- -i”,“i++”,“i- -”這樣的表達式并不陌生,可是你真正明白其中的含義嗎?

我發現在網上,充斥著對它們的誤解,或者說似是而非的,似懂非懂的理解。我先舉例一二。
一個來自于網上的例子(代碼排版我修改了一下,這樣符合我的閱讀習慣):

#include <stdio.h>int main(void) {int a = 10;int b = 20;int c = 30;int d = 40;int a1,b1,c1,d1;a1 = ++a;b1 = b++;c1 = --c;d1 = d--;printf("a=%d, a1=%d\n", a, a1);printf("b=%d, b1=%d\n", b, b1);printf("c=%d, c1=%d\n", c, c1);printf("d=%d, d1=%d\n", d, d1);return 0; }

輸出結果:
a=11, a1=11
b=21, b1=20
c=29, c1=29
d=39, d1=40
文中是這樣解釋的:

a、b、c、d 的輸出結果相信大家沒有疑問,下面重點分析a1、b1、c1、d1:

1) 對于a1=++a,先執行++a,結果為11,再將11賦值給a1,所以a1的最終值為11。而a經過自增,最終的值也為11。

2) 對于b1=b++,b的值并不會立馬加1,而是先把b原來的值交給b1,然后再加1。b原來的值為20,所以b1的值也就為20。而b經過自增,最終值為21。

3) 對于c1=- -c,先執行- -c,結果為29,再將29賦值給c1,所以c1的最終值為29。而c經過自減,最終的值也為29。

4) 對于d1=d- -,d的值并不會立馬減1,而是先把d原來的值交給d1,然后再減1。d原來的值為40,所以d1的值也就為40。而d經過自減,最終值為39。

可以看出:
a1=++a; 會先進行自增操作,再進行賦值操作;
而b1=b++; 會先進行賦值操作,再進行自增操作。
c1=- -c; 和 d1=d- -; 也是如此。

網上還有這樣的理解:

如果++或- -放在操作數前面就先進行自增或自減,再進行其他運算;
如果++或- -放在操作數后面就先進行其他運算,再進行自增或自減。

我覺得,雖然按照上文的解釋可以分析出正確的答案,但是不夠“專業”。

請看比較專業的解釋(以++為例):
后綴遞增

一個基本表達式(用E表示)的后面加上運算符“++”,就可以構成后綴遞增表達式。 例如:

int i=0; int j=0; j = i++; //合法 int *p = &i; (*p)++; //合法

后綴遞增表達式的結果不是左值,它的值是E所指示的對象在遞增操作前的原值,而不是遞增后的新值;

后綴遞增是具有副作用的表達式,這個副作用會修改E所指示的對象,將它的存儲值變為表達式E+1的值;

E要求是實數類型或者指針類型,而且必須是可以修改的左值,所以像“250++”這樣的表達式是非法的;

后綴遞增表達式的結果類型和E的類型相同。

特別要指出:后綴++運算符的值的計算和它的副作用有確定的前序和后序關系,也就是說是先計算和得到后綴運算符++的值(這也是整個后綴遞增表達式的值),再修改其操作數的存儲值。

int i=0; int j=1; j = i++;

對于j = i++;
是要把i++這個表達式的值賦值給j; 而i++這個表達式的值是i所指示的對象在遞增操作前的原值(也就是0),所以這條語句執行后,j=0;
同時,i++這個表達式是有副作用的,副作用就是i的存儲值增加1,于是i變為1;

需要強調的是,i++這個表達式的值的計算和i的遞增是有先后順序的:先計算i++這個表達式的值 (=0),再遞增i (遞增后i=1).

前綴遞增
運算符++加上一個表達式E,即可構成前綴遞增表達式。
例如:

int a[2] = {3, 4}; int *p = a; ++a[0]; //合法 ++p; //合法

前綴遞增表達式的結果不是左值,它的值是E所指示的對象在遞增操作后的新值,即它在數值上等于表達式E+1的值;

前綴遞增是具有副作用的表達式,這個副作用會修改E所指示的對象,將它的存儲值變為表達式E+1的值;

E要求是實數類型或者指針類型,而且必須是可以修改的左值,所以像++++i這樣的表達式是非法的;

前綴遞增表達式的結果類型和E的類型相同。

在語義上,前綴遞增表達式++E等價于表達式E += 1;

(完)

參考資料:《標準C語言指南》(李忠,電子工業出版社)

總結

以上是生活随笔為你收集整理的为自增(++)自减(--)运算符正名的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。