C 指標和引用的區別

2021-09-08 08:54:59 字數 1729 閱讀 8924

對於乙個型別t,t* 就是指向t的指標型別,也即乙個t* 型別的變數能夠儲存乙個t物件的位址,而型別t是可以加一些限定詞的,如const、volatile等等。

引用是乙個物件的別名,主要用於函式引數和返回值型別。

1.引用在定義的時候必須進行初始化,因為我必須要知道引用的是誰,而指標沒有要求,宣告指標是可以不指向任何物件,也正是因為這個原因,使用指標之前必須做判空操作,而引用就不必。

2.沒有null引用,但是有null指標

3.引用在初始化時引用乙個實體後,就不能再引用其他實體,對乙個物件"至死不渝"(例如ra是a的別名的話,ra就不可以是b的別名),而指標可以在任何時候指向任何乙個同型別實體。

4.在sizeof中含義不同:引用結果為引用型別的大小,但sizeof乙個指標始終是位址空間所佔位元組個數(32位平台下佔4個位元組,62位平台下佔8個位元組)

5.引用自加即引用的實體增加1,指標自加即指標向後偏移乙個型別的大小,指向下乙個物件

6.有多級指標,但是沒有多級引用

7.訪問實體方式不同,指標需要顯式解引用,引用編譯器自己處理

8.引用比指標使用起來相對更安全

總而言之,它們的這些差別都可以歸結為"指標指向一塊記憶體,它的內容是所指記憶體的位址;而引用則是某塊記憶體的別名,引用不改變指向。"

const對指標和引用的限定是有差別的

1.常量指標and常量引用

常量指標:const放在*的左邊

(例如:const int *p=&a 和 int const *p=&a)

修飾的是指標指向的內容

指標指向的內容不能通過指標來改變(*p不能改)

指標變數本身可以修改(p能改)

常量引用:const放在&的左邊

(例如:const int &ra=&a 和 int const &ra=&a)

跟指標一樣不能利用引用對指向的變數進行重新賦值操作。

2.指標常量and引用常量

指標常量:const放在*的右邊

(例如:int *const p=&a)

修飾的是指標變數本身

指標變數本身不可以修改(p不能改)

指標指向的內容可以通過指標來改變(*p可以改)

在定義指標常量時必須初始化!

引用常量:而這是引用天生具來的屬性,不用再引用指標定義語句的引用名前加const。引用時必須要進行初始化。

3.常量指標常量and常量引用常量

常量指標常量

(例如:const int *const p=&a)

指標變數本身不可以修改(p不能改)

指標指向的內容也不可以通過指標來改變(*p也不可以改)

常量引用常量

就不存在所謂的"常量引用常量"。

C 引用和指標區別

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

C 引用和指標的區別

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

C 引用和指標的區別

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