這期內容當中小編將會給大家帶來有關C++中引用傳遞與指針傳遞有什么不同,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
成都創新互聯長期為上千客戶提供的網站建設服務,團隊從業經驗10年,關注不同地域、不同群體,并針對不同對象提供差異化的產品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯網生態環境。為湘潭企業提供專業的網站建設、網站制作,湘潭網站改版等技術服務。擁有十載豐富建站經驗和眾多成功案例,為您定制開發。
1. 概念
指針從本質上講是一個變量,變量的值是另一個變量的地址,指針在邏輯上是獨立的,它可以被改變的,包括指針變量的值(所指向的地址)和指針變量的值對應的內存中的數據(所指向地址中所存放的數據)。
引用從本質上講是一個別名,是另一個變量的同義詞,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化(先有這個變量,這個實物,這個實物才能有別名),而且其引用的對象在其整個生命周期中不能被改變,即自始至終只能依附于同一個變量(初始化的時候代表的是誰的別名,就一直是誰的別名,不能變)。
2. C++中的指針參數傳遞和引用參數傳遞
指針參數傳遞本質上是值傳遞,它所傳遞的是一個地址值。值傳遞過程中,被調函數的形式參數作為被調函數的局部變量處理,會在棧中開辟內存空間以存放由主調函數傳遞進來的實參值,從而形成了實參的一個副本(替身)。值傳遞的特點是,被調函數對形式參數的任何操作都是作為局部變量進行的,不會影響主調函數的實參變量的值(形參指針變了,實參指針不會變)。
引用參數傳遞過程中,被調函數的形式參數也作為局部變量在棧中開辟了內存空間,但是這時存放的是由主調函數放進來的實參變量的地址。被調函數對形參(本體)的任何操作都被處理成間接尋址,即通過棧中存放的地址訪問主調函數中的實參變量(根據別名找到主調函數中的本體)。因此,被調函數對形參的任何操作都會影響主調函數中的實參變量。
引用傳遞和指針傳遞是不同的,雖然他們都是在被調函數??臻g上的一個局部變量,但是任何對于引用參數的處理都會通過一個間接尋址的方式操作到主調函數中的相關變量。而對于指針傳遞的參數,如果改變被調函數中的指針地址,它將應用不到主調函數的相關變量。如果想通過指針參數傳遞來改變主調函數中的相關變量(地址),那就得使用指向指針的指針或者指針引用。
從編譯的角度來講,程序在編譯時分別將指針和引用添加到符號表上,符號表中記錄的是變量名及變量所對應地址。指針變量在符號表上對應的地址值為指針變量的地址值,而引用在符號表上對應的地址值為引用對象的地址值(與實參名字不同,地址相同)。符號表生成之后就不會再改,因此指針可以改變其指向的對象(指針變量中的值可以改),而引用對象則不能修改。
3. 總結
相同點:
都是地址的概念
不同點:
指針是一個實體(替身);引用只是一個別名(本體的另一個名字)
引用只能在定義時被初始化一次,之后不可改變,即“從一而終”;指針可以修改,即“見異思遷”;
引用不能為空(有本體,才有別名);指針可以為空;
sizeof 引用,得到的是所指向變量的大?。籹izeof 指針,得到的是指針的大小;
指針 ++,是指指針的地址自增;引用++是指所指變量自增;
引用是類型安全的,引用過程會進行類型檢查;指針不會進行安全檢查;
補充:C語言的引用傳遞方法
#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
上述就是小編為大家分享的C++中引用傳遞與指針傳遞有什么不同了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創新互聯行業資訊頻道。
當前題目:C++中引用傳遞與指針傳遞有什么不同
當前路徑:http://vcdvsql.cn/article40/gghheo.html
成都網站建設公司_創新互聯,為您提供網站內鏈、定制開發、靜態網站、標簽優化、建站公司、軟件開發
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯