指標和引用主要有以下區別:
引用被建立時必須被初始化,但是不分配儲存空間。指標可以在任何時候被初始化。
引用初始化後不能被改變,指標可以改變所指的物件。
不存在指向空值得引用,但是存在指向空值得指標。
從概念上講:
在c++中,指標和引用經常用於函式的引數傳遞,然而, 指標傳遞引數和引用傳遞引數是有本質上的不同的:
從編譯的角度上來闡述指標和引用的區別:
程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數對應的位址。指標變數在符號表上對應的位址值為指標變數的位址值,而引用在符號表上對應的位址值為引用物件的位址值。符號表生成後就不會再改,因此指標可以改變其指向的物件(指標變數的值可以改),而引用物件則不能修改。
指標和引用的相同點和不同點:
指標是乙個實體,而引用僅是個別名;
引用只能在定義時被初始化一次,之後不可變;指標可變;
引用沒有const,指標有const,const的指標不可變;引用不能為空,指標可以為空;「sizeof引用」得到的是指向的變數(物件)的大小,而「sizeof指標」得到的是指標本身的大小;
指標和引用的自增(++)運算意義不一樣;
引用是型別安全的,而指標不是(引用比指標多了型別檢查);
常量引用的定義
//常量引用的格式:const int &a;const int &a=10;
int a=10;a是常量引用,並且引用的物件應該是int型別。但是dval是double型別的。因此為了確保a繫結的是整數,編譯器把上面的**變成以下形式://常量引用b和a繫結,不能通過b而改變a;
const int &b =a;
cout<< a a=20;
cout<< a const int &a=dval;
const int b = dval;其實,關鍵在於編譯器生成了乙個臨時變數b,常量引用繫結的是臨時變數b。const int &a = b;
C 中 (指標引用)和 (指標)的區別
很久之前學的c 了,複習一下,指標是乙個存放位址的變數,而指標引用指的是這個變數的引用,眾所周知c 中如果引數不是引用的話會呼叫引數物件的拷貝建構函式,所以如果有需求想改變指標所指的物件 換句話說,就是要改變指標裡面存的位址 就要使用指標引用,在網上看到大佬的 簡單明瞭,如下 include usi...
C 中指標引用和指標的區別
指標 是位址 即記憶體單元的編號 指標變數 是乙個存放位址的變數 指標引用 指的是這個指標變數的引用 眾所周知c 中如果引數不是引用的話會呼叫引數物件的 拷貝建構函式 重新開闢一塊一模一樣的記憶體空間 所以如想改變指標變數裡面存的位址,就要使用指標引用 讀 前請先搞懂 二級指標 指標的指標 指向指標...
C 中指標和引用的區別
引用和指標 相同點 1.都是位址的概念 指標指向一塊記憶體,它的內容是所指記憶體的位址 引用是某塊記憶體的別名。區別 1.指標是乙個實體,而引用僅是個別名 2.引用使用時無需解引用 指標需要解引用 3.引用只能在定義時被初始化一次,之後不可變 指標可變 引用 從一而終 4.引用沒有 const,指標...