引用與指針有什么區(qū)別

引用與指針有什么區(qū)別

1、引用是變量的別名,,指針是變量的地址,指針變量存放著那個變量的地址2、指針是可以做算術(shù)運算的,引用不行3、指針可以為NULL,也有常指針,二維指針,引用沒這些3、其實就是變量名與地址之間的區(qū)別,兩個除了用法上有些相似,其他沒什么太大關(guān)系。

指針和引用的區(qū)別

1.指針是一個實體,而引用僅是個別名;2.引用使用時無需解引用(*),指針需要解引用;3.引用只能在定義時被初始化一次,之后不可變;指針可變;引用“從一而終”^_^4.引用沒有const,指針有const,const的指針不可變;5.引用不能為空,指針可以為空;6.“sizeof引用”得到的是所指向的變量(對象)的大小,而“sizeof指針”得到的是指針本身(所指向的變量或?qū)ο蟮牡刂罚┑拇笮?typeid(T)==typeid(T&)恒為真,sizeof(T)==sizeof(T&)恒為真,但是當引用作為類成員名稱時,其占用空間與指針相同4個字節(jié)(沒找到標準的規(guī)定)。

引用和指針有何區(qū)別?何時只能使用指針而不能使用引用?

引用與指針區(qū)別:引用只是取得數(shù)據(jù),無權(quán)修改,句柄就是一種引用的方式;指針是直接指向內(nèi)存的,可以修改數(shù)據(jù)的。引用訪問一個變量是直接訪問,而指針是間接訪問。

引用是一個變量的別名,本身不單獨分配自己的內(nèi)存空間,而指針有自己的內(nèi)存空間。

引用在開始的時候就綁定到了一個內(nèi)存空間(開始必須賦初值),所以他只能是這個內(nèi)存空間的名字,而不能改成其他的,當然可以改變這個內(nèi)存空間的值.例如int i = 3,j = 4;int &x = i;//成為i的別名x = j;//不能否認x仍然引用i,并沒有成為j的別名,只是修改了x和j共享的內(nèi)存空間的值.這點與指針不同,指針在任何時刻都可以改變自己的指向。無法讓引用與其指示物分離。和指針不同,一旦引用和對象綁定,它無法再被重新指向其他對象。引用本身不是一個對象(它沒有標識;當試圖獲得引用的地址時,你將的到它的指示物的地址;記?。阂镁褪撬闹甘疚?)。

從某種意義上來說,引用類似 int* const p 這樣的const指針(并非如 const int* p這樣的指向常量的指針)。不管有多么類似,請不要混淆引用和指針;它們完全不同。盡可能使用引用,不得已時使用指針。

當不需要“重新指向(reseating)”時,引用一般優(yōu)先于指針被選用。這通常意味著引用用于類的公有接口時更有用。引用出現(xiàn)的典型場合是對象的表面,而指針用于對象內(nèi)部。

上述的例外情況是函數(shù)的參數(shù)或返回值需要一個“臨界”的引用時。這時通常**返回/獲取一個指針,并使用 NULL指針來完成這個特殊的使命。(引用應該總是對象的別名,而不是被解除引用的 NULL 指針)。

注意:由于在調(diào)用者的代碼處,無法提供清晰的的引用語義,所以傳統(tǒng)的 C 程序員有時并不喜歡引用。然而,當有了一些 C++經(jīng)驗后,你會很快認識到這是信息隱藏的一種形式,它是有益的而不是有害的。就如同,程序員應該針對要解決的問題寫代碼,而不是機器本身。

指針的與“引用”的區(qū)別

?指針和引用?是困擾初學者的問題之一,我們知道,指針和引用?都能夠指向一個對象(&對該對象進行操作),那么他們之間有什么區(qū)別呢?
我們先來看定義:
指針:指針是一個特殊的變量,這個變量指向一個內(nèi)存地址,即對象存儲空間的首地址;
引用:所指向?qū)ο蟮囊粋€別名,與直接訪問對象的方式一致;
ok,看上去有點類似,也有些差別,我們通過代碼示例來看:
char?*p1?=?NULL;?p1?=?new?char[16];?const?char?*p2?=?\”Hello?World!\”;?p2?=?\”Now?Value?Changed!\”;?int?num?=?1;?int?&ref?=?num;?ref?=?2;?//?now?num?=?2?int?const?*p3?=?#?*p3?=?3;?/百科/?now?num?=?3
我們根據(jù)例子來說明指針和引用的幾點主要區(qū)別:
1.?初始化方式不同
指針初始化可以為空(line1),引用必須指向一個對象;
2.?指向改變
指針可以改變指向(line2),引用“從一而終”,引用只能改變所引用對象的值(line7);
3.?Sizeof
指針占用內(nèi)存空間,大小由所在系統(tǒng)的位數(shù)決定(比如4或者8),而引用不申請內(nèi)存空間,sizeof對應所指對象的內(nèi)存大小;
4.?const對比
對指針來講,const?Type*?用來修飾指針(line3),所指向?qū)ο鬄槌A?,指向可以改為另一個常量(line4);
Type?const*?用來約束指針,不可以再指向其他對象,但值可以改變(line8);
來自:http://blog.csdn.net/linolzhang/article/details/54382387

區(qū)別/指針和引用的區(qū)別

指針指向一塊內(nèi)存,它的內(nèi)容是所指內(nèi)存的地址;引用是某塊內(nèi)存的別名。指針是一個實體,而引用僅是個別名;引用使用時無需解引用(*),指針需要解引用;引用只能在定義時被初始化一次,之后不可變;指針可變; 引用沒有 const,指針有 const;引用不能為空,指針可以為空;“sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或?qū)ο蟮牡刂?的大小;指針和引用的自增(++)運算意義不一樣;從內(nèi)存分配上看:程序為指針變量分配內(nèi)存區(qū)域,而引用不需要分配內(nèi)存區(qū)域。

C/C++語言-指針與引用的區(qū)別

一、指針: 1.指針的定義: 指針作為實體,是一個用來保存一個內(nèi)存地址的計算機語言中的變量。指針一般出現(xiàn)在比較底層的程序設(shè)計語言中,如C語言。

高層的語言如Java一般避免用指針,而是引用。

指針作為數(shù)據(jù)類型,可以從一個函數(shù)類型、一個對象類型或者一個不完備類型中導出。從中導出的數(shù)據(jù)類型稱之為被引用類型(referenced type)。指針類型描述了一種對象,其值為對被引用類型的實體的引用。 2.* 和 &符號 這個時候能改變a的值,而 改為 就無法改變a的值。

在執(zhí)行inc(&a);時,系統(tǒng)在內(nèi)存分配表里增加了一行“inc 中的val”,其地址為新地址,值為&a。操作*val,即是在操作a 了。 二.引用 1.引用的定義: (1)引用就是某個目標變量的“別名”,對應用的操作與對變量直接操作效果完全相同。

(2)申明一個引用的時候,切記要對其進行初始化。 2.引用的特點: (1)傳遞引用給函數(shù)與傳遞指針的效果是一樣的。這時,被調(diào)函數(shù)的形參就成為原來主調(diào)函數(shù)中的實參變量或?qū)ο蟮囊粋€別名來使用,所以在被調(diào)函數(shù)中對形參變量的操作就是對其相應的目標對象(在主調(diào)函數(shù)中)的操作。

(2)使用引用傳遞函數(shù)的參數(shù),在內(nèi)存中并沒有產(chǎn)生實參的副本,它是直接對實參操作;而使用一般變量傳遞函數(shù)的參數(shù),當發(fā)生函數(shù)調(diào)用時,需要給形參分配存儲單元,形參變量是實參變量的副本;如果傳遞的是對象,還將調(diào)用拷貝構(gòu)造函數(shù)。因此,當參數(shù)傳遞的數(shù)據(jù)較大時,用引用比用一般變量傳遞參數(shù)的效率和所占空間都好。 (3)使用指針作為函數(shù)的參數(shù)雖然也能達到與使用引用的效果,但是,在被調(diào)函數(shù)中同樣要給形參分配存儲單元,且需要重復使用\”*指針變量名\”的形式進行運算,這很容易產(chǎn)生錯誤且程序的閱讀性較差;另一方面,在主調(diào)函數(shù)的調(diào)用點處,必須用變量的地址作為實參。

而引用更容易使用,更清晰。