c++中的引用與指標的區別
指向不同型別的指標的區別在於指標型別可以知道編譯器解釋某個特定位址(指標指向的位址)中的記憶體內容及大小,而void*指標則只表示乙個記憶體位址,編譯器不能通過該指標所指向物件的型別和大小,因此想要通過void*指標操作物件必須進行型別轉化。
★ 相同點:
1. 都是位址的概念;
指標指向一塊記憶體,它的內容是所指記憶體的位址;
引用是某塊記憶體的別名。
★ 區別:
1. 指標是乙個實體(物件),而引用僅是個別名;
2. 引用使用時無需解引用(*),指標需要解引用;
3. 引用只能在定義時被初始化一次,之後不可變;指標可變;
5. 引用不能為空,指標可以為空;
6. 「sizeof 引用」得到的是所指向的變數(物件)的大小,而「sizeof 指標」得到的是指標本身(所指向的變數或物件的位址)的大小;
typeid(t) == typeid(t&) 恒為真,sizeof(t) == sizeof(t&) 恒為真,但是當引用作為類成員名稱時,其占用空間與指標相同4個位元組(沒找到標準的規定)。
7. 指標和引用的自增(++)運算意義不一樣;
★ 聯絡
1. 引用在語言內部用指標實現(如何實現?)。
2. 對一般應用而言,把引用理解為指標,不會犯嚴重語義錯誤。引用是操作受限了的指標(僅容許取內容操作)。
引用是c++中的概念,初學者容易把引用和指標混淆一起。一下程式中,n 是m 的乙個引用(reference),m 是被引用物(referent)。
intm;
int &n = m;
n 相當於m 的別名(綽號),對n 的任何操作就是對m 的操作。例如有人名叫王小毛,他的綽號是「三毛」。說「三毛」怎麼怎麼的,其實就是對王小毛說三道四。所以n 既不是m 的拷貝,也不是指向m 的指標,其實n 就是m 它自己。
引用的一些規則如下:
(1)引用被建立的同時必須被初始化(指標則可以在任何時候被初始化)。
(2)不能有null 引用,引用必須與合法的儲存單元關聯(指標則可以是null)。
(3)一旦引用被初始化,就不能改變引用的關係(指標則可以隨時改變所指的物件)。
以下示例程式中,k 被初始化為i 的引用。語句k = j 並不能將k 修改成為j 的引用,只是把k 的值改變成為6.由於k 是i 的引用,所以i 的值也變成了6.
int i = 5;
int j = 6
;
int &k =i;
k = j; //
k 和i 的值都變成了6;
C 中引用與指標的區別
1 從現象上看 指標在執行時可以改變其所指向的值,而引用一旦和某個物件繫結後就不再改變。2 從記憶體分配上看 程式為指標變數分配記憶體區域,而引用不分配記憶體區域。3 從編譯上看 程式在編譯時分別將指標和引用新增到符號表上,符號表上記錄的是變數名及變數所對應位址。指標變數在符號表上對應的位址值為指標...
C 中引用與指標的區別
指標和引用都是 c 中的基本語法成份,它們既有聯絡,也有不同之處。下面給出幾段 例項加以說明 include include using namespace std 使用指標交換資料 使用引用改變資料 引用作為函式引數進行傳遞時,實質上傳遞的是實參本身,即傳遞進來的不是實參的乙個拷貝,因此對 形參的...
C 中引用與指標的區別
一 引用 何為引用呢?其實概念很簡單,就是乙個變數的別名,操作這個別名,如同操作原物件 變數 實現的效果是一樣的!舉個簡單又能說明問題的例子,就像乙個人的 小名一樣。他既可以叫張強,亦可以稱呼其小強。那如何宣告引用呢?舉個例子 int a 30 int b a 這個符號在這裡的意思就是取乙個變數引用...