C 中指標和引用的區別

2021-09-13 11:33:42 字數 1247 閱讀 6844

指標和引用主要有以下區別:

引用被建立時必須被初始化,但是不分配儲存空間。指標可以在任何時候被初始化。

引用初始化後不能被改變,指標可以改變所指的物件。

不存在指向空值得引用,但是存在指向空值得指標。

從概念上講:

在c++中,指標和引用經常用於函式的引數傳遞,然而, 指標傳遞引數和引用傳遞引數是有本質上的不同的:

從編譯的角度上來闡述指標和引用的區別:

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

指標和引用的相同點和不同點:

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

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

引用沒有const,指標有const,const的指標不可變;引用不能為空,指標可以為空;「sizeof引用」得到的是指向的變數(物件)的大小,而「sizeof指標」得到的是指標本身的大小;

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

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

常量引用的定義

//常量引用的格式:const int &a;

const int &a=10;

int a=10;

//常量引用b和a繫結,不能通過b而改變a;

const int &b =a;

cout<< a a=20;

cout<< a const int &a=dval;

a是常量引用,並且引用的物件應該是int型別。但是dval是double型別的。因此為了確保a繫結的是整數,編譯器把上面的**變成以下形式:

const int b = dval;

const int &a = b; 

其實,關鍵在於編譯器生成了乙個臨時變數b,常量引用繫結的是臨時變數b。

C 中 (指標引用)和 (指標)的區別

很久之前學的c 了,複習一下,指標是乙個存放位址的變數,而指標引用指的是這個變數的引用,眾所周知c 中如果引數不是引用的話會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件 換句話說,就是要改變指標裡面存的位址 就要使用指標引用,在網上看到大佬的 簡單明瞭,如下 include usi...

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

指標 是位址 即記憶體單元的編號 指標變數 是乙個存放位址的變數 指標引用 指的是這個指標變數的引用 眾所周知c 中如果引數不是引用的話會呼叫引數物件的 拷貝建構函式 重新開闢一塊一模一樣的記憶體空間 所以如想改變指標變數裡面存的位址,就要使用指標引用 讀 前請先搞懂 二級指標 指標的指標 指向指標...

C 中指標和引用的區別

引用和指標 相同點 1.都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 4.引用沒有 const,指標...