定義
e.g.
int a = 1;
int* b = &a;
int& c = a;
//指標b儲存變數a的位址;int型引用c取變數a的位址,相當於變數a的別名
//使用時,*b = a = 1, c = a = 1;
//指標b可以改變其儲存的位址,指向其他的int變數
int d = 2; b = &d;
//則改變後指標b儲存的是變數d的位址 *b = d = 2;
//引用在定義時必須初始化,不能只為空;而指標定義時可只為空指標null;
//(此處的const引用是指不可以更改引用的物件,也即引用的位址,但可以對引用的物件的資料值進行修改)
// sizeof指標得到的是指標本身的大小,sizeof引用得到的是引用物件的大小
//指標可以有二級指標如int** a,沒有二級引用
作為函式引數傳遞時的區別
指標作為引數:
呼叫該函式時,若傳入的引數為一般的非指標變數型別,應用取位址符 e.g. function(¶meter);
(函式傳入引數的實質是在函式模組中重新定義變數對傳入的引數進行拷貝[形參],又由於指標的定義e.g int* a = &b),若傳入的引數為指標,則function(pointer)。
[c中沒有引用的概念,因而採用二級指標的形式實現引用的功能(對傳入引數的本身[實參]進行修改,而不單是對函式中的拷貝變數[形參]進行修改)]
引用作為引數:
實質上傳遞的是實參本身,即傳入的不是實參的拷貝,因而對形參的值的修改其實是對實參的修改,所以在傳遞引數時用引用可以節省時間及空間。(對於不允許拷貝的以及不需要修改實參值的函式,使用const引用效率會更高)
指標與引用
摘自 高質量c 程式設計 指標與引用,在more effective c 的條款一有詳細講述,我給你轉過來 條款一 指標與引用的區別 指標與引用看上去完全不同 指標用操作符 和 引用使用操作符 但是它們似乎有相同的功能。指標與引用都是讓你間接引用其他物件。你如何決定在什麼時候使用指標,在什麼時候使用...
引用與指標
引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增 符號來定義。復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都 關聯到 某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始...
指標與引用
include iostream using namespace std void testref int i 10 引用不可以為空,他是乙個物件的別名 int ref i ref cout i 00824f1e mov dword ptr i 1 把i的位址傳入eax 並把eax指標的位址傳給re...