指標與引用

2021-09-12 00:24:29 字數 1097 閱讀 7232

一:指標與引用定義和性質上的差別

引用:是原變數的乙個別名,本質上仍然是同乙個

2.可以有const的指標,沒有const的引用

引用可以指向常量,也可以指向變數。例如int &a=b,使引用a指向變數b。而為了讓引用指向常量,必須使用常量引用,如const int &a=1; 它代表的是引用a指向乙個const int型,這個int型的值不能被改變,而不是引用a的指向不能被改變,因為引用的指向本來就是不可變的,無需加const宣告。即指標存在常量指標int const *p和指標常量int *const p,而引用只存在常量引用int const &a,不存在引用常量int& const a。

3.指標可以有多級,但是引用只能有一級

4.指標的值可以為null,但是引用的值不能為null,並且引用在定義時必須初始化

5.指標的值在初始化之後可以改變,即指向其他的儲存單元而引用在初始化,而引用在初始化之後就不會改變了

6.sizeof引用之後得到的時所指向變數(物件)的大小,sizeof指標後再32位下時4,64位下是8

7.指標和引用的自加意義不同(指標自加位址引用自加變數值)

二:指標和引用再函式傳遞引數時的差別

1.指標傳遞引數本質上時值傳遞的方式,它傳遞的時乙個位址值,值傳遞的過程中,被調函式的形參作為被調函式的區域性變數處理,即在棧中開闢了記憶體空間以存放由主調函式放進來的實參的值,從而成為了實參的乙個副本。值傳遞的特點是被調函式對形式引數的任何操作都是作為區域性變數進行,不會影響主調函式的實參變數的值。(這裡是在說實參指標本身的位址值不會變)

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

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

指標與引用

摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...

引用與指標

引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...

指標與引用

include iostream using namespace std void testref int i 10 引用不可以為空,他是乙個物件的別名 int ref i ref cout i 00824f1e mov dword ptr i 1 把i的位址傳入eax 並把eax指標的位址傳給re...