指標與引用的區別

2021-08-08 12:38:06 字數 1193 閱讀 6809

相同點

指標與引用都是位址的概念,指標指向的是一塊記憶體,它的內容是這塊記憶體的位址;引用是某塊記憶體的別名。

區別:

1.指標是乙個實體,而引用僅僅只是乙個別名。

2.引用使用時不需要解引用『*』,指標使用時需要解引用。

3.引用只能在定義的時候被初始化一次,之後不能再改變作為別的變數的別名,而指標可以在任意時候改變它的指向(const指標除外)。

4.引用的物件必須是有效的乙個變數,不能為空;指標可以有空指標。

5.sizeof引用得到的是引用物件的大小,而sizeof指標是指標所指向物件的位址的大小,在32位平台下指標的大小為4個位元組,在64位平台下指標的大小為8個位元組。

6.指標與引用++的含義不一樣,引用++是將引用的物件的值++,指標是在該位址上往後指標指向物件大小的空間,比如該物件是int,則往後4個位元組的空間。

不要返回乙個臨時變數的引用,如果返回物件出了當前作用域依舊存在,則最好返回引用,因為這樣更高效。引用要求型別必須嚴格保持一致。但是有兩種特例:第 一種就是在初始化常量引用允許用任意表示式作為初始值,只要該 表示式的結果可以轉換成引用的型別。當乙個常引用被繫結到另乙個型別上時,常引用繫結的是另乙個型別物件強轉之後的乙個臨時物件。

聯絡

1.引用在內部其實是由指標實現的。

2.一般而言,把引用理解為指標不會犯嚴重的語義錯誤,引用可以理解為操作受限制的指標。

那麼指標比引用更靈活,能完成的操作更多,c++中為什麼還要引入引用的概念呢?

指標雖然比引用更加靈活,但同時它也比引用更加危險。使用指標時我們必須判斷指標是否為空,在指標所指向的位址被釋放了以後,最好將指標也置為空。一旦出現記憶體被釋放了以後,指標卻還指向該記憶體,就會出現「野指標」的問題,容易出現記憶體洩漏。

對於使用引用和指標的時機,總的來說,在以下情況下你應該使用指標,一是你考慮到存在不指向任何物件的可能(在這種情況下,你能夠設定指標為空),二是你需要能夠在不同的時刻指向不同的物件(在這種情況下,你能改變指標的指向)。如果總是指向乙個物件並且一旦指向乙個物件後就不會改變指向,那麼你應該使用引用。

還有一種情況,就是當你過載某個操作符時,你應該使用引用。最普通的例子是操作符.這個操作符典型的用法是返回乙個目標物件,其能被賦值。

總之一句話,盡可能地使用引用,迫不得已使用指標。

引用與指標的區別

1.初始化要求不同。引用在建立的同時必須初始化,而指標在定義的時候不必初始化,可以在定義後面的任何地方重新賦值 2.可修改性不同。引用一旦被初始化,就不能被另乙個物件引用了,而指標在任何時候都可以指向另乙個物件 3.不存在null引用。引用不能使用指向空值的引用,必須指向某物件 而指標可以是null...

指標與引用的區別

指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但...

指標與引用的區別

指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用引用呢?首先,要認識到在任何情況下都不能用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但是...