欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

C++中的自增與自減

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

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

1、自增與自減

1.1 基本用法

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

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

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

比如:

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


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

同理,我們?cè)谫x值的時(shí)候也是一樣:

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

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

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

1.2 進(jìn)階理解

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

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

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

比如:

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

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

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

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

比如下面這個(gè)例子:

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


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

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

1.3 差異

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

比如:

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


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

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

1.4 指針自增、自減

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

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

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

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

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

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

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

相關(guān)文章

  • C++ Leetcode實(shí)現(xiàn)從英文中重建數(shù)字

    C++ Leetcode實(shí)現(xiàn)從英文中重建數(shù)字

    本文主要介紹了當(dāng)給你一個(gè)字符串s,其中包含字母順序打亂的用英文單詞表示的若干數(shù)字(0-9)時(shí),如何通過Leetcode按升序返回原始的數(shù)字。感興趣的童鞋可以來看看
    2021-11-11
  • 基于C語言實(shí)現(xiàn)點(diǎn)菜系統(tǒng)

    基于C語言實(shí)現(xiàn)點(diǎn)菜系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)點(diǎn)菜系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-11-11
  • C++實(shí)現(xiàn)教工考勤信息管理系統(tǒng)

    C++實(shí)現(xiàn)教工考勤信息管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)教工考勤信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • C++的靜態(tài)類型檢查詳解

    C++的靜態(tài)類型檢查詳解

    這篇文章主要為大家詳細(xì)介紹了C++的靜態(tài)類型檢查,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++ Boost Bimap示例詳細(xì)講解

    C++ Boost Bimap示例詳細(xì)講解

    Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱
    2022-11-11
  • C++動(dòng)態(tài)內(nèi)存管理詳解

    C++動(dòng)態(tài)內(nèi)存管理詳解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++動(dòng)態(tài)分配內(nèi)存的介紹,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2021-08-08
  • 解析四方定理的應(yīng)用

    解析四方定理的應(yīng)用

    所有自然數(shù)至多只要用四個(gè)數(shù)的平方和就可以表示
    2013-05-05
  • C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決

    C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決

    這篇文章主要介紹了C語言將數(shù)組中元素的數(shù)排序輸出的相關(guān)問題解決,文中的題目是將元素連接起來排成一個(gè)數(shù)并要求出這類結(jié)果中數(shù)最小的一個(gè),需要的朋友可以參考下
    2016-03-03
  • C++的對(duì)象特性和友元你真的了解嗎

    C++的對(duì)象特性和友元你真的了解嗎

    這篇文章主要為大家詳細(xì)介紹了C++的對(duì)象特性和友元,使用數(shù)據(jù)庫,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • 簡(jiǎn)單講解C++的內(nèi)部和外部函數(shù)以及宏的定義

    簡(jiǎn)單講解C++的內(nèi)部和外部函數(shù)以及宏的定義

    這篇文章主要介紹了簡(jiǎn)單講解C++的內(nèi)部和外部函數(shù)以及宏的定義,是C++入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-09-09

最新評(píng)論