C 指標和引用的區別

2021-10-12 22:11:34 字數 1187 閱讀 2269

#c++指標和引用的區別

指標在定義的時候不一定要初始化,並且指向的空間可變;

引用定義的時候必須初始化,並且不能改變(引用的值不能為null)。

有多級指標,無多級引用;有const指標,無const引用。

指標的自增為指向下乙個空間,而引用是引用的變數加1

sizeof引用是變數(物件)的大小,而sizeof指標是指標本身的大小。

引用訪問乙個變數時直接訪問,而指標是間接訪問。

作為引數傳遞時,指標是傳值,傳遞的是指標的位址;傳引用是傳位址,傳遞的是變數的位址。

指標引數傳遞本質上是值傳遞,它所傳遞的是乙個位址值。值傳遞過程中,被調函式的形式引數作為被調函式的區域性變數處理,會在棧中開闢記憶體空間以存放由主調函式傳遞進來的實參值,從而形成了實參的乙個副本(替身)。
引用引數傳遞過程中,被調函式的形式引數也作為區域性變數在棧中開闢了記憶體空間,但是這時存放的是由主調函式放進來的實參變數的位址。被調函式對形參(本體)的任何操作都被處理成間接定址,即通過棧中存放的位址訪問主調函式中的實參變數(根據別名找到主調函式中的本體)。因此,被調函式對形參的任何操作都會影響主調函式中的實參變數。

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

#include

using

namespace std;

//通過改變指向的內容來改變實參的值

void

swap1

(int

*p,int

*q)//通過間接定址,改變是實參的值

void

swap2

(int

&p,int

&q)//無法改變形參的值

void

swap3

(int

*p,int

*q)void

main()

輸出結果

C 引用和指標區別

一 引用簡介 引用就是某一變數 目標 的乙個別名,對引用的操作與對變數直接操作完全一樣。引用的宣告方法 型別識別符號 引用名 目標變數名 例1 int a int ra a 定義引用ra,它是變數a的引用,即別名 說明 1 在此不是求位址運算,而是起標識作用。2 型別識別符號是指目標變數的型別。3 ...

C 引用和指標的區別

很久沒寫過這類文章了,本來是想做下筆記,既然要做筆記,不如寫下部落格,就動起手來。文采不怎麼樣,還忘大家見諒 c 引用變數是c 中新增的一種復合型別,也就是說標準c語言中沒有引用變數。所謂引用,實際上就是乙個已定義變數的別名,別名我想大家小時候都有,應該可以理解,別名表示的是同乙個人,這裡引用變數和...

C 引用和指標的區別

c 引用和指標在間接使用其他物件的各種操作功能上面類似,但是兩者的不同之處也很明顯 1.指標本身佔據記憶體空間,但是引用只是乙個物件的別名,本身不分配記憶體空間 2.指標定義時可以不初始化,但是定義乙個引用必須進行初始化,並且初始化時只能是乙個物件 比如 int b 3.14 這樣是錯的,要明白 引...