引用就是物件的另乙個名字,在實際的程式中,引用主要用作函式的形式引數。引用是一種復合型別,通過在變數名前新增「&」符號來定義。
復合型別是指用其他型別定義的型別。在引用的情況下,每一種引用型別都「關聯到」某一其他型別。引用必須用與該引用同型別的物件初始化。當引用初始化後,只要該引用存在,它就保持繫結到初始化時指向的物件,不可能將引用繫結到另乙個物件。
const 引用時指向const物件的引用,具體介紹參見const介紹文章。
下面是引用用法的一些例子:
int ival = 1024;
int &refval = ival;
int &refval2; //錯誤
refval+=2;
int i = 1024,i2 = 2048;
int &r = i,&r2 = i2;
const int ival = 1024;
const int &refval = ival;
int &ref2 = ival; //錯誤
指標用於指向物件,儲存的是另乙個物件的位址。
有兩種風格的宣告方式,如string *str;或string* str;不能說哪種風格更好,重要的是選擇一種並持續使用。
0值常量表示式;型別匹配的物件位址;同型別的另乙個有效指標;另一物件之後的下一位址;
double pi = 3.14;
double *pd = π
void *pv = π
pv = pd;
引用總是指向某個物件:定義引用時沒有初始化是錯誤的,引用一經初始化,就始終指向同乙個特定物件。
給引用賦值修改的是該引用所關聯的物件的值,而並不是使引用與另乙個物件關聯,也是引用只被初用於指定同一物件導致的。如下:
int ival = 1024,ival2 = 2048;
int *pi = &ival,*pi2 = &ival2;
pi = pi2; //pi指向了ival2
int &ri = ival,&ri2 = ival2;
ri = ri2; //將ival2賦值給ival
指向const物件的指標
const int intval = 43;
const void *cpv = &intval; //正確
void *pv = &intval; //錯誤
const物件指標,允許把非const物件的位址賦給該指標,但是不允許直接修改其所指物件的值(本質上來說,由於沒有辦法分辨const指標所指的物件是否為const,系統會把它所指的所有物件都視為const)。看下例:
const int intval = 43;
const void *cpv = &intval;
int intval2 = 42;
cpv = &intval2;
*cpv = 24; //錯誤
指標與引用
摘自 高質量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...
引用與指標
引用有什麼作用呢?看下面 就知道了 cpp view plain copy include using namespace std intmain 第一行輸出 ref 12,num 12 第二行輸出 ref 16,num 16 第三行輸出 ref 18,num 18 由上面三行輸出可以看出引用ref...