C 中引用與指標的區別,請簡述c 中引用和指標的區別

2021-08-21 01:46:29 字數 3255 閱讀 8309

1樓:go陌小潔

c++中指標與引用的區別:

1.定義和性質的區別:

(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)指標和引用的自增(++)運算意義不一樣;

2.指標和引用作為函式引數進行傳遞時的區別。

(1)指標作為引數進行傳遞:

#include

using namespace std;

void swap(int *a,int *b)

int main(void)

int main(void)

輸出結果為:0x22ff44 1

指標p不為null

2樓:幻夢·人生

相同點:

都是地址的概念;

指標指向一塊記憶體,它的內容是所指記憶體的地址;而引用則是某塊記憶體的別名。

不同點:

指標是一個實體,而引用僅是個別名;

引用只能在定義時被初始化一次,之後不可變;指標可變;引用「從一而終」,指標可以「見異思遷」;

引用不能為空,指標可以為空;

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

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

引用是型別安全的,而指標不是(引用比指標多了型別檢查)

3樓:匿名使用者

引用就是重新命名:

int a = 0;

int& b = a;

就是給 a 這個變數重新取一個名字.

所以 你在使用 a或b的時候其實都是使用的同一個變數.

比如:有人個人叫張三。張三的好朋友常常叫張三 小張。

也就是說 張三和小張是同一個人。

4樓:笨笨de世界

引用是別名,共享一塊記憶體空間,而指標是要單獨佔4位元組的記憶體空間的,裡面存的是另一塊記憶體地址的索引

請簡述c++中引用和指標的區別

5樓:砍侃看

關於指標和引用的區別,c++ primer是這麼說的:

1、引用總是指向某個物件;定義引用時沒有初始化是錯誤的。

2、賦值行為有差異。給引用賦值修改的是該引用所關聯的物件的值,而不是使引用於另一個物件關聯。引用已經初始化,就始終指向同一個特定物件。

舉個列子:

引用就像是你的身份證號,一出生就有了,而且終身不變,也不能把這個身份證號給別人。無論什麼時候,對這個身份證號做的操作,都是對你做操作。

指標就像是你公司的工號,可以把這個工號指向你,也可以改變這個工號讓它指向別人。

6樓:影者東昇

本質:引用是別名,指標是地址,具體的:

①從現象上看,指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變。這句話可以理解為:指標可以被重新賦值以指向另一個不同的物件。

但是引用則總是指向在初始化時被指定的物件,以後不能改變,但是指定的物件其內容可以改變。

②從記憶體分配上看,程式為指標變數分配記憶體區域,而不為引用分配記憶體區域,因為引用宣告時必須初始化,從而指向一個已經存在的物件。引用不能指向空值。

注:標準沒有規定引用要不要佔用記憶體,也沒有規定引用具體要怎麼實現。

③ 從編譯上看,程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應地址。指標變數在符號表上對應的地址值為指標變數的地址值,而引用在符號表上對應的地址值為引用物件的地址值。符號表生成後就不會再改,因此指標可以改變指向的物件(指標變數中的值可以改),而引用物件不能改。

這是使用指標不安全而使用引用安全的主要原因。從某種意義上來說引用可以被認為是不能改變的指標。

④不存在指向空值的引用這個事實,意味著使用引用的**效率比使用指標的要高。因為在使用引用之前不需要測試它的合法性。相反,指標則應該總是被測試,防止其為空。

⑤理論上,對於指標的級數沒有限制,但是引用只能是一級。如下:

int** p1; // 合法。指向指標的指標

int*& p2; // 合法。指向指標的引用

int&* p3; // 非法。指向引用的指標是非法的

int&& p4; // 非法。指向引用的引用是非法的

注意上述讀法是從左到右。

c++類的物件和類的指標的區別,指標和引用的區別

7樓:千鋒教育

c++ 物件是類的示例,當定義一個類的時候,系統是不為這個類分配空間的,只有當定義類的物件的時候才會分配空間,類的物件實際上就是類空間的引用。指標是用來儲存變數的地址。

c++中指標和引用的區別詳解

8樓:匿名使用者

1. 指標是一個實體,而引用僅是個別名;

2. 引用使用時無需解引用(*),指標需要解引用;

3. 引用只能在定義時被初始化一次,之後不可變;指標可變;

引用「從一而終」 ^_^

4. 引用沒有 const,指標有 const,const 的指標不可變;

5. 引用不能為空,指標可以為空;

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

typeid(t) == typeid(t&) 恆為真,sizeof(t) == sizeof(t&) 恆為真,但是當引用作為類成員名稱時,其佔用空間與指標相同4個位元組(沒找到標準的規定)。

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

指標和引用的區別,C 中指標和引用的區別詳解

1 引用必須被初始化,指標不必。2 引用初始化以後不能被改變,指標可以改變所指的物件。3 不存在指向空值的引用,但是存在指向空值的指標。指標是一個變數的地址,引用是一個變數的別名。例 int a 10 a存放在儲存空間的地址為 0x000009int b a b就是a的引用,此時b 的值也為10in...

c語言指標中多維陣列的引用aij表示

p i j 表示陣列a中元素a 首地址 i j a i j a i j 請問c 中指標與二維陣列,下面圖中程式裡的 p i 3 j 是什麼意思啊?謝謝 20 這個利用的是二維陣列還是順序儲存的特點來直接計算a i j 的儲存位置 p i 3 j 就是a i j 因為p是指向首元素的元素指標,a每行有...

C引用返回值與返回指標

int d c 也就是 d就等效於c了啊 也就是return d 就等效於 return c d是指標d指向的資料,你的寫法中,指標d指向了引用c的位置,其實也就是傳入實參a的地址空間上的資料,故而是一直存在且可以正確返回的。如果你在k 函式內部不是使用傳輸的c 也就是換個變數名,什麼都行 那自然就...