什麼是C++引用
c++引用是一個已存在變數的別名。
c++引用的意義
1.在某些場合c++引用可以替代指標。
2.相對指標來說,引用能提高程式碼可讀性。
示例1 引用作為函式引數:
//兩數交換,利用指標
void swap1(int *a,int *b)
{
int temp = *a;
*a = *b;
*b = temp;
}
//兩數交換,利用引用(引用作為引數)
void swap2(int &a,int &b)
{
int temp = a;
a = b;
b =temp;
}
int main() {
int c =10;
int d = 100;
swap1(&c,&d);
cout<<c<<","<<d<<endl;
swap2(c,d);
cout<<c<<","<<d<<endl;
return 0;
}
輸出結果
100,10
10,100
示例2 引用作為函式返回值:
#include <iostream>
using namespace std;
int nums[5] = {1,2,3,4,5};
//利用引用作為函式返回值
int& SetNum1(int i)
{
int &temp = nums[i];
return temp;
}
//利用指標作為函式返回值
int* SetNum2(int i)
{
int *temp = &nums[i];
return temp;
}
int main() {
SetNum1(1) = 10*1;
SetNum1(4) = 10*4;
for (int i =0 ; i<5; i++)
cout<<nums[i]<<endl;
*SetNum2(1) = 100 *1;
*SetNum2(4) = 100 *4;
for (int i =0 ; i<5; i++)
cout<<nums[i]<<endl;
}
輸出:
1
10
3
4
40
1
100
3
4
400
以上示例可以看出,實現同樣功能,從可讀性來說,明顯引用更勝一籌。
引用佔用記憶體空間嗎
#include <iostream>
using namespace std;
int main() {
int a=10;
int& b=a;
cout<<"引用b佔用的記憶體空間為:"<< sizeof(b)<<endl;
char c = 'a';
char &d = c;
cout<<"引用c佔用的記憶體空間為:"<< sizeof(c)<<endl;
return 0;
}
輸出:
引用b佔用的記憶體空間為:4
引用c佔用的記憶體空間為:1
引用的本質
C++引用本質其實是一個指標常量(這就不難解釋為什麼int型引用會佔用4個位元組的記憶體空間,char 型引用佔用一個位元組。因為int指標佔用四個位元組記憶體,char型指標佔用一個位元組)。
注意事項
當函式返回引用時:
1.若返回棧變數,函式返回不能當作其他引用的初始值,不能當左值。(因為函式呼叫結束後,函式內的區域性變數被銷燬,函式返回的引用(指標常量)會成為“無所指”的引用(指標)。
2.若返回靜態變數或者全域性變數,函式返回可以做其他引用的初始值,而且既能當做左值,也能當右值。(因為靜態變數或者全域性變數,程式執行期一直存在,從程式開始到程式結束)。
本作品採用《CC 協議》,轉載必須註明作者和本文連結