C 指標與引用的區別

2022-09-09 07:36:07 字數 974 閱讀 6737

指標從本質上講就是存放變數位址的乙個變數,在邏輯上是獨立的,它可以被改變,包括其所指向的位址的改變和其指向的位址中所存放的資料的改變。

而引用是乙個別名,它在邏輯上不是獨立的,它的存在具有依附性,所以引用必須在一開始就被初始化,而且其引用的物件在其整個生命週期中是不能被改變的(自始至終只能依附於同乙個變數)。

在c++中,指標和引用經常用於函式的引數傳遞,然而,指標傳遞引數和引用傳遞引數是有本質上的不同的:

(1)指標傳遞引數本質上是值傳遞的方式,它所傳遞的是乙個位址值。

值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。

而在引用傳遞過程中,被調函式的形式引數雖然也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數。正因為如此,被調函式對形參做的任何操作都影響了主調函式中的實參變數。

引用傳遞和指標傳遞是不同的,雖然它們都是在被調函式棧空間上的乙個區域性變數,但是任何對於引用引數的處理都會通過乙個間接定址的方式操作到主調函式中的相關變數。而對於指標傳遞的引數,如果改變被調函式中的指標位址,它將影響不到主調函式的相關變數。如果想通過指標引數傳遞來改變主調函式中的相關變數,那就得使用指向指標的指標,或者指標引用。

程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。指標變數在符號表上對應的位址值為指標變數的位址值,而引用在符號表上對應的位址值為引用物件的位址值。符號表生成後就不會再改,因此指標可以改變其指向的物件(指標變數中的值可以改),而引用物件則不能修改。

最後,總結一下指標和引用的相同點和不同點:

(1)相同點:

(2)不同點:

**(22條訊息) c++中指標和引用的區別_wuwuku123的部落格-csdn部落格

C 指標與引用的區別

以前對指標和引用的區別沒有清楚的認識,看了此文之後對指標和引用的區別有了更深刻的了解。特將此文儲存下來,以便日後再讀。指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要...

C 指標與引用的區別

1.非空區別。在任何情況下都不能使用指向空值的引用。乙個引用必須指向某些物件。比如說說下面的程式為錯誤的。int a error 指標可以指向乙個空的變數。int p correct int pp null correct 2.合法性區別。在使用引用之前不需要測試其合法性。相反,指標則應總被測試,防...

C 指標與引用的區別

指標與引用是c 中兩個很重要的概念,它們功能看過去很相似,就是都是間接引用某個物件,那麼我們應該在什麼時候使用指標,什麼時候使用引用呢,下面請允許我慢慢道來 1.永遠不要使用乙個指向空值的引用。乙個引用必須始終指向某個物件,所以當你確定使用乙個變數指向某個物件時,但是這個物件在某些時間可能指向空值,...