一. 函數傳入引用參數
引用的作用是爲一個變量起一個別名。
01 建立一個引用
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main(){
int a = 5;
int &b = a;
cout<<a<<endl;
cout<<b<<endl;
cout<<&a<<endl;
cout<<&b<<endl;
}
- 經過聲明後b是a別名,b與a代表的是同一個變量,佔內存中同一個存儲單元,具有同一地址。
代碼輸出
⚠️注意&
符號作爲取地址符與作爲引用聲明符的區別。
- 只有在數據類型後
&
纔是引用聲明符
02 使用引用的一些注意事項:
- 聲明一個引用時,必須同時使之初始化,及聲明它代表哪一個變量。
- 有一個例外,引用作爲函數參數時,不需要初始化。
- 在聲明一個引用後,不能再使之作爲另一變量的引用。
- 不能建立引用數組。
03 引用的作用
引用最重要的意義在於作爲函數的參數,以擴充函數傳遞參數的能力。
04 調用函數時,傳參的三種形式:
1. 變量名作爲實參和形參 —— “值傳遞”
- 這種方式傳給形參的是變量的值,傳遞是單向的。
- 如果在執行函數器件形參的值變了,不會回傳給實參。
2. 傳遞變量的地址 —— “值傳遞”
- 該方式形參是指針變量,實參是一個變量的地址。
- 調用函數時,形參得到的實參變量的地址,因此指向實參的變量單元。
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
void swap(int * , int * );
int i = 3, j = 5;
swap( &i, &j);
cout << "i=" << i << endl << "j=" << j << endl;
return 0;
}
void swap(int * a, int * b) {
int temp;
temp = *a;
*a = *b;
*b = temp;
}
// 輸出
// i=5
// j=3
- 運行結果實現了i和j的交換。
3. 引用作爲函數參數 —— “變量傳遞”
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main()
{
void swap(int & ,int&);
int i = 3,j = 5;
swap(i,j);
cout << "i=" << i << endl << "j=" << j << endl;
return 0;
}
void swap(int &a,int &b)
{
int temp;
temp = a;
a = b;
b= temp;
}
// 輸出
// i=5
// j=3
- 形參是聲明的引用,注意這個引用並沒有初始化,這就是上面提到的特例。
- 函數調用時實現了引用的初始化,這時傳入的實參就是變量,而不是數值,所以做到了真正意義上的“
變量傳遞
”。