來源:http://www.cppblog.com/aurain/archive/2008/02/22/43093.aspx
★ 相同點:
1. 都是地址的概念;
指針指向一塊內存,它的內容是所指內存的地址;引用是某塊內存的別名。
★ 區別:
1. 指針是一個實體,而引用僅是個別名;
2. 引用使用時無需解引用(*),指針需要解引用;
3. 引用只能在定義時被初始化一次,之後不可變;指針可變;
4. 引用沒有 const,指針有 const;(引用可以有const?)
5. 引用不能爲空,指針可以爲空;
6. “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
7. 指針和引用的自增(++)運算意義不一樣;
8.從內存分配上看:程序爲指針變量分配內存區域,而引用不需要分配內存區域。
指針的解引用的概念:指針的解引用,是真引用它指向的變量的值。(引用是指向關係不變的指針)
來源:http://canaan.jimdo.com/2009/02/17/引用和指針的區別形象詳細說明/
引用和指針的區別
|
定義 |
初始化 |
|
用法 |
指針 |
變量的指針就是變量的地址 |
可以不初始化,不過一般初始化爲NULL |
可以隨時改變所指的對象 |
在一般情況下,引用和指針是一樣的;在返回一個對象時,儘量不要用引用,而是指針。
|
引用 |
引用是變量的別名 |
在定義時必須指定某個變量 |
一旦初始化,就不能改變引用的關係
|
問題:實際上“引用”可以做的任何事情“指針”也都能夠做,爲什麼還要“引用”這東西?
答案:
我的反問:爲什麼有了斧頭之後,還有菜刀,小刀之類的呢?現在就很明白了。
殺雞焉用牛刀?我們要用適當的工具做恰如其分的工作。
如果的確只需要借用一下某個對象的“別名”,那麼就用“引用”,而不要用“指針”,
以免發生意外。比如說有人向你借一百塊錢,那你給他一百,就恰如其分了。如果你非
要給他銀行卡,密碼。那後果會怎樣誰也不知道。功能強大是好,但不是越大越好,
有人會搞破壞的,要恰如其分