引用就是起別名
引用的基本語法
Type(類型) &別名=原名
&寫在左側(cè)盖文,叫引用汞舱,寫到右側(cè)铐望,叫取地址
int &b=a;
b與a地址相同
int* b=&a;
b等于a的地址值
引用必須初始化 壁袄,引用初始化后不可修改
int a=10;
int &b=a;//引用的a必須初始化
int c=20;
b=c; //不能賦值丧靡,錯誤
對數(shù)組起別名
int arr[10]={0};
int(&parr)[10]=arr;
或
typedef int(ARRAYREF)[10]; //一個具有10個元素的int數(shù)組
ARRAYREF&Parr2=arr;
引用傳遞
void mySwap(int &a,int &b)
{
int tmp=a;
a=b;
b=tmp;
}
引用的注意事項
引用必須引一塊合法的內(nèi)存空間(int &a=10;錯誤的方式)
不用返回局部變量的引用(局部變量在函數(shù)結(jié)束時銷毀了饮戳,靜態(tài)局部變量例外)
如果函數(shù)的返回值是引用呻征,那么這個函數(shù)調(diào)用可以作為左值
-
不能對NULL引用
引用的本質(zhì)
int a=10; int &b=a挪挤; 自動轉(zhuǎn)換為int*const b=&a;叼丑,這也說明指針為啥必須初始化 b=20; 內(nèi)部發(fā)現(xiàn)b是引用,自動幫我們轉(zhuǎn)換為*b=20;
常量的引用
const int &ref=10; //加入const后編譯器處理方式為:int tmp=10;const int &ref=&tmp;
常量引用使用場景:
用來修飾形參
void ShowVal(const int¶m) { cout<<param<<endl; }
指針的引用
struct person
{
int age;
}
void show(struct person*&p)
{
p=(struct person*)malloc(sizeof(struct person));
p.age=20;
}
int main()
{
struct person *p=NULL;
show(P)扛门;
return EXIT_SUCCESS;
}