[TOC]
#1.引用的概念及用法
概念:引用就是某一變量(目標)的一個別名,對引用的操作與對變量直接操作完全一樣。
溫馨提示:引用不是定義一個新的變量
定義的格式爲:
類型 &引用變量名 = 已定義過的變量名;
用法:
舉個例子:
int a = 5;
int& b = a;
這就是引用,b引用a,b是a的別名。
#2.引用做參數
我們在C語言中經常用指針做參數:
Func(int *a) ;
int main()
{
int arr[1000];
Func(arr);
}
像這種情況我們會用指針作爲參數,增加程序運行效率。*當然指針由於太靈活,會導致不安全在裏面,故此C++引入了引用類型,他的效果和指針一樣其實引用底層就是指針,下面會介紹。
引用作爲參數:**
Func(int& a) ;
int main()
{
int arr[1000];
Func(arr);
}
引用作爲參數很好的規避了指針的風險,同時能達到指針的效果。
當不希望函數內改變參數x的值時,儘量使用常引用傳參.
void ReadBigData (const bigData& x)//此時不需要在函數內部改變參數的值我們賦予參數常屬性
{
int a = x. array[100];
}
#3.引用做返回值
以引用返回函數值,定義函數時需要在函數名前加&
int ret = 0;//全局變量
int Add1(int a, int b)
{
ret = a + b;
return ret;
}
int& Add2(int a, int b)//引用做返回值
{
ret = a + b;
return ret;
}
int main( )
{
printf("%d\n", Add1(5,6));
printf("%d\n", Add2(4,5));
return 0;
}
引用做返回值優點:
用引用返回一個函數值的最大好處是,在內存中不產生被返回值的副本。
#4.彙編層看引用的特性
結論:
-
不要返回一個臨時變量的引用。
- 如果返回對象出了當前函數的作用域依舊存在,則最好使用引用返回,因爲這樣更高效。
#5.引用和指針的區別和聯繫:
▶不同點:
-
指針是一個實體,而引用僅是個別名;
-
引用使用時無需解引用(*),指針需要解引用;
-
引用只能在定義時被初始化一次,之後不可變;指針可變;
-
引用沒有 const,指針有 const;const修飾的指針不可變;
-
引用不能爲空,指針可以爲空;
- “sizeof 引用”得到的是所指向的變量(對象)的大小,而“sizeof 指針”得到的是指針本身(所指向的變量或對象的地址)的大小;
-
-
指針和引用的自增(++)運算意義不一樣;
8.從內存分配上看:程序爲指針變量分配內存區域,而引用不需要分配內存區域。
▶相同點:兩者都是地址的概念,指針指向一塊兒內存,其內容爲所指內存的地址;引用是某塊兒內存的別名。