1、引用概念
引用引入了物件的乙個同義詞。定義引用的表示方法與定義指標相似,只是用&帶起了*。
例如:point pt1(10,10);
point &pt2 = pt1;//定義pt2為pt1的引用。通過這樣的定義,pt1和pt2表示同意物件,需要特別強調的是引用並不是產生物件的副本,僅僅是物件的同義詞。因此,當下面的語句執行後:
pt1.ofset(2,2);
pt1和pt2都具有了(12,12);
引用必須在定義的時候馬上初始化,因為它必須是某個東西的同義詞。你不能先定義乙個引用後才初始化它。例如下面是非法的:
point &pt3;
pt3 = pt1;
2、引用簡介
引用就是某乙個變數(目標)的別名,對引用的操作與對變數直接操作一樣。
引用的宣告方法:型別識別符號 &引用名 = 目標變數名
例如:int a;
int &ra = a;//定義引用ra,它就是變數a的引用,即別名。
說明:(1)&在此不是球位址運算,而是起標示作用。
(2)型別識別符號是指目標變數的型別
(3)宣告引用時,必須同時對其進行初始化
(4)引用宣告完畢後,相當於目標變數有兩個名稱,即目標原名稱和引用名,且不能再把引用名作為其他變數的別名。
ra =1;等價於a=1;
(5)宣告乙個引用,不是新定義乙個變數,它之表示該引用時目標變數名的乙個別名,它本身不是一種資料型別,因此引用本身不佔儲存單元,系統也不會給引用分配儲存空間;所以對引用球位址就是對目標變數球位址。&ra =與&a相等。
(6)不能建立陣列的引用。因為陣列是乙個有如幹元素所組成的集合,所以無法建立乙個陣列的別名。
3、引用的應用
引用的乙個重要作用就是作為函式的引數。以前的c語言中的函式是值傳遞,如果有大塊資料作為引數傳遞的時候,採用的方法往往是指標,因為這樣做可以避免將整塊資料全部壓棧,可以提高程式的效率。但是現在(c++)中有增加了一種同樣的有效率的選擇,就是引用。
例如:void swap(int &p1,int &p2)
int main()
4、指標與引用的差異
1)定義引用時沒有初始化是錯誤的。
2)給引用賦值修改的是該引用所關聯物件的值。(指標 儲存的是它指向的變數的位址。解引用, 就是引用它指向的變數的值。
引用本身就是目標變數的別名)
[cpp] view plaincopy
string str("hello world");
string &rstr1; //error
string &rstr2 = str;
rstr2 = "nihao shijie";
cout << str << endl;
int ival = 1;
int ival2 = 2;
int &r1 = ival,&r2 = ival2;
r1 = r2;
cout << r1 << endl;
cout << ival << endl;
4、具體可以參考博文講解的很詳細
C Primer 學習筆記(三) 陣列和指標
首先需明確,現代c 程式應盡量使用vector和迭代器型別,而避免使用低階的陣列和指標。設計良好的程式只有在強調速度時才在類實現的內部使用陣列和指標。一 陣列 1 陣列的定義和初始化 1 陣列的維數必須用值大於等於1的常量表示式定義。此常量表示式只能為 整型字面值常量 列舉常量或者用常量表示式初始化...
c primer學習筆記3 陣列和指標
現代c 程式應盡量使用vector和迭代器型別,而避免使用低階別的陣列和指標。設計良好的程式只有在強調速度時才在類實現的內部使用陣列和指標。1 字串字面值以空字元結尾 2 陣列下標的正確型別是size t 1 指標與引用 a.引用必須初始化,而指標不必,故指標使用時必須檢查是否為空 b.引用一旦初始...
C primer筆記 指標
1 指標存放某個物件的位址,要想獲取該位址,需要使用取位址符 操作符 定義指標型別的方法將宣告符寫成 d的形式,其中d是變數名。引用不是物件,沒有實際位址,不能定義指向引用的指標 1 指向乙個物件 2 指向緊鄰物件所佔空間的下乙個位置 3 空指標,意味著指標沒有指向任何物件。4 無效指標,也就是上述...