最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++中的自增與自減

 更新時間:2021年11月03日 10:46:43   作者:梁唐  
這篇文章主要介紹了C++中的自增與自減,自增與自減是C++當(dāng)中兩個使用頻率非常高的運算符,不僅在循環(huán)當(dāng)中用到,在日常的代碼當(dāng)中也經(jīng)常使用,下面來看看文章得具體介紹

自增與自減是C++當(dāng)中兩個使用頻率非常高的運算符,不僅在循環(huán)當(dāng)中用到,在日常的代碼當(dāng)中也經(jīng)常使用。

1、自增與自減

1.1 基本用法

自增與自減是C++當(dāng)中兩個使用頻率非常高的運算符,不僅在循環(huán)當(dāng)中用到,在日常的代碼當(dāng)中也經(jīng)常使用。

甚至C++這個名稱的由來都和自增運算符有關(guān),表示C語言的升級版。當(dāng)然這也是C#名字的由來,#這個符號表示4個疊加的加號……不得不吐槽這微軟的惡趣味。

我們都知道自增有兩種寫法,一種是i++另外一種是++i。這兩種寫法對于i這個變量的最終結(jié)果來說是一樣的,都是自增了1,但是對于自增這個操作的發(fā)生時間,則有很大的差異。

比如:

int a = 0, b = 0; 
cout << a++ << endl; 
cout << ++b << endl; 


最終我們得到的輸出結(jié)果是0和1,差別就在執(zhí)行自增的時間。對于cout << a++來說,它是先執(zhí)行cout操作,再執(zhí)行自增,而cout << ++b則相反,是先執(zhí)行自增再執(zhí)行cout。

同理,我們在賦值的時候也是一樣:

int a = 0, b = 0; 
int c = a++; 
int d = ++b; 

c和d得到的結(jié)果同樣是一個為0,另外一個為1,原因和剛才一樣。

以上的規(guī)則同樣適用于自減。

1.2 進階理解

現(xiàn)在我們知道了++i的執(zhí)行順序在i++之前,那么問題來了,那么它們兩者的執(zhí)行順序究竟是怎樣的?差異到底在哪里呢?

對此,C++當(dāng)中有一個叫做順序點的概念,順序點指的是程序執(zhí)行過程中的一個點。在C++當(dāng)中語句中的分號就是一個順序點,在程序處理下一條語句之前,賦值運算符、自增、自減運算符執(zhí)行的所有修改都必須完成。除了分號之外,完整的表達式末尾也是一個順序點。

完整表達式的概念有點費解,C++ Primer中的定義是不是另一個更大的表達式的子表達式,比如while循環(huán)中的檢測語句就是一個完整表達式。

比如:

int cnt = 0; 
while (cnt++ < 10) cout << cnt << endl; 

程序的輸出結(jié)果是:

我們可以看到它的輸出結(jié)果從1開始,而并非從0開始。意味著我們在執(zhí)行cout之前,cnt變量就已經(jīng)完成了自增。這進一步說明了while(cnt++ < 10)本身就已經(jīng)是一個完整表達式了。因此在這個表達式執(zhí)行之前,C++就會完成自增的操作。

關(guān)于完整表達式還有一個坑點,就是它的執(zhí)行順序。

比如下面這個例子:

y = (4 + x++) * (6 + x++); 


由于(4 + x++)(6 + x++)都不是一個完整表達式,因此C++并不能保證x++的執(zhí)行順序,它沒有規(guī)定是在每個子表達式計算之后執(zhí)行自增,還是整個表達式計算之后再自增。它只能保證在執(zhí)行到下一條語句之前x變量被自增兩次,至于它的執(zhí)行時間則無法保障。

因此,最好不要寫出這樣的代碼,不僅可讀性差,而且結(jié)果也可能不可靠。

1.3 差異

我們還有一個問題沒有解決,在不影響結(jié)果的情況下,前綴的形式和后綴的形式究竟還有沒有其他差別呢?

比如:

x++; 
++x; 
 
for (int i = 0; i < n; i++); 
for (int i = 0; i < n; ++i); 


我們現(xiàn)在知道它們的結(jié)果是一樣的,但在內(nèi)部執(zhí)行是有細微差別的。差別在于后綴的形式會先生成一個拷貝值,再將拷貝值賦值給原值,而前綴的版本是直接在原值上修改。因此理論上來說,前綴版本的效率更高。當(dāng)然這當(dāng)中的差別非常細微,幾乎可以忽略不計。

但是在面試當(dāng)中很有可能會被問到,因此有所了解即可。

1.4 指針自增、自減

自增自減操作同樣可以運用在指針上,前文當(dāng)中介紹過,這表示指針的移動。自增表示向右移動一位,自減表示向左移動一位。

這很簡單,但是當(dāng)我們把一些操作符結(jié)合在一起就有些麻煩了。C++當(dāng)中規(guī)定,前綴運算符和解引用運算符優(yōu)先級相同,按照從右到左的方式結(jié)合,后綴運算符優(yōu)先級更高,從左至右。

這意味著*++pt表示先執(zhí)行指針自增操作,也就是移動一位之后,再解引用。

++*pt則意味著先解引用取得值,再對改值加1。

x=*pt++由于后綴符的優(yōu)先級更高,意味著先執(zhí)行指針移動,再解引用。如果大家實在搞不清楚的話,可以使用括號。

到此這篇關(guān)于C++中的自增與自減的文章就介紹到這了,更多相關(guān)C++自增與自減內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

注:文章轉(zhuǎn)自微信眾號:Coder梁(ID:Coder_LT)

相關(guān)文章

  • C++通過SQLiteSDK增刪改查的實現(xiàn)示例

    C++通過SQLiteSDK增刪改查的實現(xiàn)示例

    SQLite是一種輕量級的嵌入式數(shù)據(jù)庫,可以利用SQLiteSDK執(zhí)行數(shù)據(jù)庫的增刪改查操作,本文主要介紹了C++通過SQLiteSDK增刪改查,具有一定的參考價值,感興趣的可以了解一下
    2025-03-03
  • C語言實現(xiàn)素因子分解

    C語言實現(xiàn)素因子分解

    這篇文章主要為大家詳細介紹了C語言實現(xiàn)素因子分解,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-10-10
  • Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows)

    Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows)

    Clion2020增加了很多新特性,修復(fù)了大量bug,大大提高了開發(fā)效率。這篇文章主要介紹了Clion2020.2.x最新激活碼破解版附安裝教程(Mac Linux Windows),需要的朋友可以參考下
    2020-11-11
  • Matlab處理圖像后實現(xiàn)簡單的人臉檢測

    Matlab處理圖像后實現(xiàn)簡單的人臉檢測

    本文主要介紹一下如何使用matlab進行圖像處理后實現(xiàn)人臉檢測,感興趣的可以了解一下
    2021-11-11
  • Matlab實現(xiàn)數(shù)據(jù)的動態(tài)顯示方法

    Matlab實現(xiàn)數(shù)據(jù)的動態(tài)顯示方法

    這篇文章主要為大家詳細介紹了Matlab使用Plot函數(shù)實現(xiàn)數(shù)據(jù)動態(tài)顯示方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-06-06
  • C++驅(qū)動bash的實現(xiàn)代碼

    C++驅(qū)動bash的實現(xiàn)代碼

    這篇文章主要介紹了C++驅(qū)動bash的實現(xiàn)代碼,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-11-11
  • C/C++?Qt?TableDelegate?自定義代理組件使用詳解

    C/C++?Qt?TableDelegate?自定義代理組件使用詳解

    TableDelegate自定義代理組件的主要作用是對原有表格進行調(diào)整,本文主要介紹了QT中TableDelegate?自定義代理組件的使用教程,感興趣的朋友可以了解一下
    2021-12-12
  • C語言菜鳥基礎(chǔ)教程之?dāng)?shù)據(jù)類型

    C語言菜鳥基礎(chǔ)教程之?dāng)?shù)據(jù)類型

    在 C 語言中,數(shù)據(jù)類型指的是用于聲明不同類型的變量或函數(shù)的一個廣泛的系統(tǒng)。變量的類型決定了變量存儲占用的空間,以及如何解釋存儲的位模式。
    2017-10-10
  • C++ 虛函數(shù)專題

    C++ 虛函數(shù)專題

    這篇文章主要介紹了C++中虛函數(shù)的知識點,文中配合代碼講解非常細致,供大家參考和學(xué)習(xí),感興趣的朋友可以了解下
    2020-06-06
  • C++學(xué)習(xí)之多態(tài)的使用詳解

    C++學(xué)習(xí)之多態(tài)的使用詳解

    這篇文章主要為大家詳細介紹了C++中多態(tài)的機制以及使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)C++有一定的幫助,感興趣的可以了解一下
    2022-06-06

最新評論

建平县| 文山县| 南郑县| 宣威市| 张掖市| 巴东县| 博白县| 博罗县| 延津县| 湘潭市| 庐江县| 芮城县| 定南县| 九龙城区| 邵武市| 清河县| 毕节市| 新田县| 乌拉特中旗| 光泽县| 浮梁县| 抚顺县| 上杭县| 工布江达县| 阿瓦提县| 新邵县| 长乐市| 桓台县| 清流县| 英吉沙县| 革吉县| 陇南市| 山阳县| 城市| 休宁县| 桐庐县| 宿迁市| 米林县| 丽水市| 洪泽县| 柞水县|