面試 指標和引用的區別

2021-08-21 06:31:23 字數 2582 閱讀 2308

一、指標和引用的定義和性質區別:

(1) 指標:指標是乙個變數,只不過這個變數儲存的是乙個位址,指向記憶體的乙個儲存單元,即指標是乙個實體;而引用跟原來的變數實質上是同乙個東西,只不過是原變數的乙個別名而已。如:

int a=1;int *p=&a;

int a=1;int &b=a;

上面定義了乙個整形變數和乙個指標變數p,該指標變數指向a的儲存單元,即p的值是a儲存單元的位址。

而下面2句定義了乙個整形變數a和這個整形a的引用b,事實上a和b是同乙個東西,在記憶體占有同乙個儲存單元。

(2) 可以有const指標,但是沒有const引用

(3)指標可以有多級,但是引用只能是一級(int **p;合法 而 int &&a是不合法的)

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

(5)指標的值在初始化後可以改變,即指向其它的儲存單元,而引用在進行初始化後就不會再改變了,從一而終

(6)」sizeof引用」得到的是所指向的變數(物件)的大小,而」sizeof指標」得到的是指標本身的大小;

(7)指標和引用的自增(++)運算意義不一樣;

二、相同點

都是位址的概念;

指標指向一塊記憶體,它的內容是所指記憶體的位址;

引用是某塊記憶體的別名。

三、聯絡

1、引用在語言內部用指標實現(如何實現?)。

2、對一般應用而言,把引用理解為指標,不會犯嚴重語義錯誤

static singleton* getinstance()

singleton* s1 = singleton::getinstance();

引用是操作受限了的指標(僅容許取內容操作)。

引用是c++中的概念,初學者容易把引用和指標混淆一起。以下程式中,n是m的乙個引用(reference),m 是被引用物(referent)。

int m;

int &n = m;

n 相當於m 的別名(綽號),對n 的任何操作就是對m 的操作

引用的一些規則如下:

(1)引用被建立的同時必須被初始化(指標則可以在任何時候被初始化)。

(2)不能有null 引用,引用必須與合法的儲存單元關聯(指標則可以是null)。

(3)一旦引用被初始化,就不能改變引用的關係(指標則可以隨時改變所指的物件)。

以下示例程式中,k 被初始化為i 的引用。語句k = j 是把k 的值改變成為6,由於k 是i 的引用,所以i 的值也變成了6.

int i = 5;

int j = 6;

int &k = i;

k = j; // k 和i 的值都變成了6

上面的程式看起來象在玩文字遊戲,沒有體現出引用的價值。引用的主要功能是傳遞函式的引數和返回值。c++語言中,函式的引數和返回值的傳遞方式有三種:值傳遞、指標傳遞和引用傳遞。

「引用傳遞」的性質像「指標傳遞」,而書寫方式像「值傳遞」。實際上「引用」可以做的任何事情「指標」也都能夠做,為什麼還要「引用」這東西

答案是「用適當的工具做恰如其分的工作」。

指標能夠毫無約束地操作記憶體中的如何東西,儘管指標功能強大,但是非常危險

就象一把刀,它可以用來砍樹、裁紙、修指甲、理髮等等,誰敢這樣用?

如果的確只需要借用一下某個物件的「別名」,那麼就用「引用」,而不要用「指標」,以免發生意外。比如說,某人需要乙份證明,本來在檔案上蓋上公章的印子就行了,如果把取公章的鑰匙交給他,那麼他就獲得了不該有的權利。

總的來說,在以下情況下你應該使用指標:

一是你考慮到存在不指向任何物件的可能(在這種情況下,你能夠設定指標為空),

二是你需要能夠在不同的時刻指向不同的物件(在這種情況下,你能改變指標的指向)。如果總是指向乙個物件並且一旦指向乙個物件後就不會改變指向,那麼你應該使用引用。

還有一種情況,就是當你過載某個操作符時,你應該使用引用。

盡可能使用引用,不得已時使用指標。

當你不需要「重新指向」時,引用一般優先於指標被選用。這通常意味著引用用於類的公有介面時更有用。引用出現的典型場合是物件的表面,而指標用於物件內部。

指標引用和引用指標的區別

c 在傳參的過程中,指標 和指標引用 是有區別的。雖然,我們往往可以通過傳指標然後通過間址訪問來修改指標所指向物件的值,同樣,通過引用也可以直接修改物件的值。但是,當傳指標的時候有乙個問題,就是,我們雖然可以通過指標來修改指標所指向物件的值,但是我們沒有不能直接修改指標的內容 也就是指標變數存放的位...

傳指標和傳指標引用的區別 指標和引用的區別(本質)

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

傳指標和傳指標引用的區別 指標和引用的區別(本質)

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