引用是c++相對於c擴充套件的一種型別,其作用是為某個變數定義乙個別名
。
則,通過原變數
和別名
都能操作該對應的記憶體資料。
datatype &ref_name = origin_name;
datatype
是資料型別,與origin_name變數的型別一致;ref_name
是引用的變數名(別名
),origin_name
是被引用的變數名(原名稱
);
如:
int a =10;
int&a1 = a;
// 引用,a1為a的別名
以上定義後,a1為a的別名,意味著,對a1的操作等同於對a的操作,反之亦然。如:
cout <<
"a:"
<< a << endl;
cout <<
"a1:"
<< a1 << endl;
a1 =20;
cout <<
"a:"
<< a << endl;
cout <<
"a1:"
<< a1 << endl;
終端輸出為:
a:10
a1:10
a:20
a1:20
int
&a1;
// error:declaration of reference variable 'a1' requires an initializer
先看引用變數的記憶體位址。
int a =10;
int&a1 = a;
// 引用,a1為a的別名
// 輸出 a和a1的記憶體位址
cout <<
&a <<
", "
<<
&a1 << endl;
終端列印:0x7ffeefbff5ec, 0x7ffeefbff5ec
可以看出,a和a1
兩個變數都是「指向」同乙個位址
的;這樣就能解釋為什麼對a或a1進行操作,能影響另乙個。
引用的本質實際上是指標的封裝
。
是乙個指向原變數記憶體位址的指標,封裝了內部實現,使用起來相較指標而言更為簡單。
因為引用是別名的這一特質,在引數傳遞過程中,可以提高速度
和減少記憶體開銷
;同時函式內部也可以修改實參
。
datatype functionname(datatype ¶m
, …)
例:定義swap函式,實現兩個值的交換
void
swap
(int
&a,int
&b)int
main()
終端輸出:
a:10
b:20
a:20
b:10
交換實參的值,是對引用傳遞比較經典的例子,那如果在函式內部不需要修改實參的值,那形參定義為引用或普通變數的區別又是什麼呢?
形參為普通變數:
void
funshowstudent1
(student s)
形參為引用變數:
void
funshowstudent2
(student &s)
main函式中呼叫:
int
main()
終端輸出:
姓名:binson
年齡:24
身高:172.5
體重:68.8
姓名:binson
年齡:24
身高:172.5
體重:68.8
觀察可得知,普通型別形參的位址不同於
實參變數的位址;所以funshowstudent1函式在呼叫過程中,形參需開闢新的記憶體
存放資料。而引用變數使用實參同乙個記憶體。
如果涉及到深拷貝
情況更複雜,在後續章節記錄。
因為在函式內部不需要對實參進行修改,所以形參使用常引用
進行傳遞,提高安全性。
如下:const student &s
void
funshowstudent
(const student &s)
datatype&
functionname(…)
例:
int
&funexample2()
大寫的錯誤:不能返回區域性變數
的引用。這個錯誤編譯時只會報警告,在執行時會程式奔潰。
不能返回區域性變數的引用,但可以返回,靜態變數,全域性變數的引用。如:
int
&funexample3()
在main函式中呼叫:
int
&res =
funexample3()
;cout << res << endl;
本文示例** C 核心程式設計 02 引用
作用 給變數起別名 語法 資料型別 別名 原名 示例 include using namespace std intmain 示例 include using namespace std intmain 作用 函式傳參時,可以利用引用的技術讓形參修飾實參 優點 可以簡化指標修改實參 示例 inclu...
C 基礎(05) 引用
1 引用就是給變數起乙個別名。其本質就是乙個指標常量 指標指向的位址不可以修改 int a 10 b 是a的別名。b和a所訪問的記憶體是相同的 int b a 2 注意事項 3 引用作為函式的引數 1 函式的引數傳遞可以為 值傳遞 位址傳遞 引用傳遞。其中值傳遞不會改變原來的變數內容,其相當於將原來...
5 0 引用型別
ecmascript中有5中簡單資料型別 也叫基本資料型別 undefined boolean null number string。還有一種複雜資料型別 object object本質上是一組無序的明值対組成的 1 應用型別的值 物件 是引用型別的乙個例項。2 在es種,引用型別是一種資料結構,用...