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

C++中引用傳遞與指針傳遞的區(qū)別(面試常見)

 更新時(shí)間:2018年03月26日 15:59:22   投稿:mrr  
這篇文章主要介紹了C++中引用傳遞與指針傳遞的區(qū)別(面試常見),需要的朋友可以參考下

最近Garena面試的過(guò)程中,面試官提了一個(gè)問(wèn)題,C++中引用傳遞和指針傳遞的區(qū)別?

根據(jù)自己的經(jīng)驗(yàn),聯(lián)想到了swap函數(shù),只知道既可以用引用來(lái)實(shí)現(xiàn),又可以用指針傳遞來(lái)實(shí)現(xiàn),至于二者有何區(qū)別,自己還真沒(méi)有考慮過(guò)。

痛定思痛,受虐之后,趕緊彌補(bǔ)自己的知識(shí)漏洞。

通過(guò)在網(wǎng)上搜集資料,自己也整理了一下。

精簡(jiǎn)版:

指針:變量,獨(dú)立,可變,可空,替身,無(wú)類型檢查;

引用:別名,依賴,不變,非空,本體,有類型檢查;

完整版:

1. 概念

  指針從本質(zhì)上講是一個(gè)變量,變量的值是另一個(gè)變量的地址,指針在邏輯上是獨(dú)立的,它可以被改變的,包括指針變量的值(所指向的地址)和指針變量的值對(duì)應(yīng)的內(nèi)存中的數(shù)據(jù)(所指向地址中所存放的數(shù)據(jù))。

  引用從本質(zhì)上講是一個(gè)別名,是另一個(gè)變量的同義詞,它在邏輯上不是獨(dú)立的,它的存在具有依附性,所以引用必須在一開始就被初始化(先有這個(gè)變量,這個(gè)實(shí)物,這個(gè)實(shí)物才能有別名),而且其引用的對(duì)象在其整個(gè)生命周期中不能被改變,即自始至終只能依附于同一個(gè)變量(初始化的時(shí)候代表的是誰(shuí)的別名,就一直是誰(shuí)的別名,不能變)。

2. C++中的指針參數(shù)傳遞和引用參數(shù)傳遞

  指針參數(shù)傳遞本質(zhì)上是值傳遞,它所傳遞的是一個(gè)地址值。值傳遞過(guò)程中,被調(diào)函數(shù)的形式參數(shù)作為被調(diào)函數(shù)的局部變量處理,會(huì)在棧中開辟內(nèi)存空間以存放由主調(diào)函數(shù)傳遞進(jìn)來(lái)的實(shí)參值,從而形成了實(shí)參的一個(gè)副本(替身)。值傳遞的特點(diǎn)是,被調(diào)函數(shù)對(duì)形式參數(shù)的任何操作都是作為局部變量進(jìn)行的,不會(huì)影響主調(diào)函數(shù)的實(shí)參變量的值(形參指針變了,實(shí)參指針不會(huì)變)。

  引用參數(shù)傳遞過(guò)程中,被調(diào)函數(shù)的形式參數(shù)也作為局部變量在棧中開辟了內(nèi)存空間,但是這時(shí)存放的是由主調(diào)函數(shù)放進(jìn)來(lái)的實(shí)參變量的地址。被調(diào)函數(shù)對(duì)形參(本體)的任何操作都被處理成間接尋址,即通過(guò)棧中存放的地址訪問(wèn)主調(diào)函數(shù)中的實(shí)參變量(根據(jù)別名找到主調(diào)函數(shù)中的本體)。因此,被調(diào)函數(shù)對(duì)形參的任何操作都會(huì)影響主調(diào)函數(shù)中的實(shí)參變量。

  引用傳遞和指針傳遞是不同的,雖然他們都是在被調(diào)函數(shù)??臻g上的一個(gè)局部變量,但是任何對(duì)于引用參數(shù)的處理都會(huì)通過(guò)一個(gè)間接尋址的方式操作到主調(diào)函數(shù)中的相關(guān)變量。而對(duì)于指針傳遞的參數(shù),如果改變被調(diào)函數(shù)中的指針地址,它將應(yīng)用不到主調(diào)函數(shù)的相關(guān)變量。如果想通過(guò)指針參數(shù)傳遞來(lái)改變主調(diào)函數(shù)中的相關(guān)變量(地址),那就得使用指向指針的指針或者指針引用。

  從編譯的角度來(lái)講,程序在編譯時(shí)分別將指針和引用添加到符號(hào)表上,符號(hào)表中記錄的是變量名及變量所對(duì)應(yīng)地址。指針變量在符號(hào)表上對(duì)應(yīng)的地址值為指針變量的地址值,而引用在符號(hào)表上對(duì)應(yīng)的地址值為引用對(duì)象的地址值(與實(shí)參名字不同,地址相同)。符號(hào)表生成之后就不會(huì)再改,因此指針可以改變其指向的對(duì)象(指針變量中的值可以改),而引用對(duì)象則不能修改。

3. 總結(jié)

相同點(diǎn):

  都是地址的概念

不同點(diǎn):

  指針是一個(gè)實(shí)體(替身);引用只是一個(gè)別名(本體的另一個(gè)名字)

  引用只能在定義時(shí)被初始化一次,之后不可改變,即“從一而終”;指針可以修改,即“見異思遷”;

  引用不能為空(有本體,才有別名);指針可以為空;

  sizeof 引用,得到的是所指向變量的大?。籹izeof 指針,得到的是指針的大小;

  指針 ++,是指指針的地址自增;引用++是指所指變量自增;

  引用是類型安全的,引用過(guò)程會(huì)進(jìn)行類型檢查;指針不會(huì)進(jìn)行安全檢查;

補(bǔ)充:C語(yǔ)言的引用傳遞方法

#include
#include
int main(int argc, const char * argv[]){
double pi = 3.14;
double intgerPart;
double fractionPart;
fractionPart = modf(pi, &intgerPart);
printf("Pi's Interger Part is %.0f, and Pi's fraction part is %.2f \n", intgerPart, fractionPart);
return 0;
}
Result:
Pi's Interger Part is 3, and Pi's fraction part is 0.14
Program ended with exit code: 0

總結(jié)

以上所述是小編給大家介紹的C++中引用傳遞與指針傳遞的區(qū)別(面試常見),希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

相關(guān)文章

  • C++中Overload,Override,Hide之間的區(qū)別

    C++中Overload,Override,Hide之間的區(qū)別

    重載overload,這個(gè)概念是大家熟知的。在同一可訪問(wèn)區(qū)內(nèi)被聲名的幾個(gè)具有不同參數(shù)列的(參數(shù)的類型、個(gè)數(shù)、順序不同)同名函數(shù),程序會(huì)根據(jù)不同的參數(shù)列來(lái)確定具體調(diào)用哪個(gè)函數(shù),這種機(jī)制就是重載
    2013-09-09
  • C++ 情懷游戲貪吃蛇的實(shí)現(xiàn)流程詳解

    C++ 情懷游戲貪吃蛇的實(shí)現(xiàn)流程詳解

    貪吃蛇是曾經(jīng)諾基亞手機(jī)上很經(jīng)典很經(jīng)典的傳統(tǒng)老游戲,80.90后的童年時(shí)不多的游戲之一,跟電腦上的掃雷一樣,下面來(lái)從貪吃蛇手機(jī)游戲的前世今生講起
    2021-11-11
  • C++ 網(wǎng)絡(luò)連通性檢測(cè)的實(shí)現(xiàn)方法

    C++ 網(wǎng)絡(luò)連通性檢測(cè)的實(shí)現(xiàn)方法

    這篇文章主要介紹了C++ 網(wǎng)絡(luò)連通性檢測(cè)的實(shí)現(xiàn)方法的相關(guān)資料,這里提供實(shí)例幫助大家實(shí)現(xiàn)這樣的功能,需要的朋友可以參考下
    2017-09-09
  • 一篇文章帶你了解C語(yǔ)言的選擇結(jié)構(gòu)

    一篇文章帶你了解C語(yǔ)言的選擇結(jié)構(gòu)

    這篇文章主要為大家介紹了C語(yǔ)言的選擇結(jié)構(gòu),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-01-01
  • C++重載輸入和輸出運(yùn)算符詳解

    C++重載輸入和輸出運(yùn)算符詳解

    在C++中,標(biāo)準(zhǔn)庫(kù)本身已經(jīng)對(duì)左移運(yùn)算符<<和右移運(yùn)算符>>分別進(jìn)行了重載,使其能夠用于不同數(shù)據(jù)的輸入輸出,本節(jié)以前面的?complex?類為例來(lái)演示輸入輸出運(yùn)算符的重載,需要的朋友可以參考下
    2023-09-09
  • 自己模擬寫C++中的String類型實(shí)例講解

    自己模擬寫C++中的String類型實(shí)例講解

    下面小編就為大家?guī)?lái)一篇自己模擬寫C++中的String類型實(shí)例講解。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-07-07
  • QT如何通過(guò)鼠標(biāo)事件實(shí)現(xiàn)圖片的拖動(dòng)和縮放

    QT如何通過(guò)鼠標(biāo)事件實(shí)現(xiàn)圖片的拖動(dòng)和縮放

    本文介紹了如何通過(guò)鼠標(biāo)拖動(dòng)移動(dòng)圖片以及使用鼠標(biāo)滾輪進(jìn)行圖片縮放的技術(shù)實(shí)現(xiàn),包括完整的解決方案,ImageWidget.h、ImageWidget.cpp和main.cpp的編寫,以及詳細(xì)的函數(shù)解釋,如paintEvent()重繪圖片,以及平滑縮放和偏移量的應(yīng)用等,需要的朋友可以參考下
    2024-10-10
  • C語(yǔ)言實(shí)現(xiàn)漢諾塔(圖文詳解)

    C語(yǔ)言實(shí)現(xiàn)漢諾塔(圖文詳解)

    個(gè)人覺得漢諾塔這個(gè)遞歸算法比電子老鼠的難了一些,不過(guò)一旦理解了也還是可以的,其實(shí)網(wǎng)上也有很多代碼,可以直接參考。記得大一開始時(shí)就做過(guò)漢諾塔的習(xí)題,但是那時(shí)代碼寫得很長(zhǎng)很長(zhǎng),也是不理解遞歸的結(jié)果。今天重新來(lái)實(shí)現(xiàn)一下
    2021-08-08
  • 利用C++實(shí)現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點(diǎn)

    利用C++實(shí)現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點(diǎn)

    利用C++實(shí)現(xiàn)矩陣的相加/相稱/轉(zhuǎn)置/求鞍點(diǎn)。需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2013-10-10
  • 簡(jiǎn)單談?wù)凜++ 中指針與引用

    簡(jiǎn)單談?wù)凜++ 中指針與引用

    下面用通俗易懂的話來(lái)概述一下,指針-對(duì)于一個(gè)類型T,T*就是指向T的指針類型,也即一個(gè)T*類型的變量能夠保存一個(gè)T對(duì)象的地址,而類型T是可以加一些限定詞的,引用-引用是一個(gè)對(duì)象的別名,主要用于函數(shù)參數(shù)和返回值類型,符號(hào)X&表示X類型的引用。
    2015-09-09

最新評(píng)論

进贤县| 宁夏| 博湖县| 荔波县| 乌鲁木齐县| 申扎县| 肃宁县| 洞头县| 都江堰市| 凤翔县| 广西| 广宗县| 延吉市| 循化| 休宁县| 定兴县| 明水县| 辽宁省| 七台河市| 长沙县| 西平县| 华池县| 沈阳市| 江津市| 浑源县| 宣汉县| 临漳县| 东光县| 九江县| 台前县| 响水县| 长沙市| 会理县| 沁阳市| 广昌县| 墨竹工卡县| 淮北市| 区。| 四川省| 米脂县| 通辽市|