指標和引用的差別

2021-06-22 07:22:26 字數 1090 閱讀 9234

指標和引用的區別:主要有以下四個方面

(1)非空區別:在任何情況下,都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用一   個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時就應該把變數宣告為指標,因為這樣才可以賦空值給該變數。相反,如果變數肯定指向乙個物件,即加入不允許變數為空,此時就可以把變數宣告為引用。不存在指向空值的引用,這意味使用引用的**效率比使用指標

的效率高。

(2)合法性區別:在使用引用之前不需要測試它的合法性。相反,指標則應該總是被測試,防止其為空。

(3)可修改性:指標和引用的另乙個重要區別是指標可以被重新賦值以指向另乙個不同的物件。但是引用則總是指向在初始化時被指定的物件,以後不能改變,但是指定的物件其內容可以改變。

(4)應用區別:總的來說,在以下情況下應該使用指標:一是考慮到存在不指向任何物件的可能(即能夠設定指標為空),二是需要能夠在不同時刻指向不同的物件(即能改變指標的指向)。如果總是指向乙個物件並且一旦指向乙個物件後就不會改變指向,此時應該使用引用。

舉例**如下:

#include using namespace std;

int main()

{ int v1;//正常宣告了乙個整型變數

int v2 = 1024;//正常宣告乙個整型變數並初始化

int &v3;//錯誤,宣告乙個引用,但沒有初始化,因為引用不能為空

int &v4 = v1;//宣告乙個引用,同時初始化,即v4是v1的別名

int *p1;//宣告了乙個整型指標,但沒有定義這個指標所指向的位址

*p1 = 5;//錯誤,整數指標p1沒有指向實際的位址,這種情況下賦值是錯誤的,因為賦的值不知道存放在**,故錯誤

p1 = &v2;//正確,整數指標p1指向v2的實際位址

const double d1;//錯誤,const常量賦值時,必須同時初始化

const double d2 = 10.5;//正確,const常量賦值並同時初始化

const double *p = &d2;//正確,const常量指標賦值並同時初始化

cout<

指標和引用的差別

1.非空 在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某個物件。所以如果你使用乙個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時應該把變數宣告為指標,因為這樣就可以賦空值給該變數。相反,如果變數肯定指向乙個物件,比如你的設計不允許變數為空,這時就可以把變數宣告為...

指標和引用的差別

1 非空區別。在任何情況下都不能使用指向空值的引用。乙個引用必須總是指向某些物件。因此如果你使用乙個變數並讓它指向乙個物件,但是該變數在某些時候也可能不指向任何物件,這時你應該把變數宣告為指標,因為這樣你可以賦空值給該變數。相反,如果變數肯定指向乙個物件,例如你的設計不允許變數為空,這是你就可以把變...

引用和指標的差別,陣列和指標的差別

一 引用和指標的差別 1 引用並不是物件,它僅僅是為乙個已存在的物件所起的另外乙個名字。必須初始化,並且無法改變它繫結的物件,之後每次使用這個引用都是訪問最初繫結的那個物件。2 指標本身是物件,能夠不用初始化,能夠改變指標指向的物件 二 指標與陣列的差別 指標陣列 儲存資料的位址 儲存資料 間接訪問...