定義
int a = 10;
int &ref = a;
對ref更改即對a地址下的值進(jìn)行更改 (與指針相同)
引用與函數(shù)
1. 引用創(chuàng)建時(shí)必須初始化 而指針可以初始化也可以不被初始化
- 引用一旦與某個(gè)對象建立了關(guān)聯(lián) 在生命周期不能再引用其他對象 而指針可以任何時(shí)候轉(zhuǎn)向其他對象
- 不允許存在空引用 不許與有效空間對象建立關(guān)聯(lián) c++允許存在空指針
- 引用是與地址間接產(chǎn)生聯(lián)系 指針變量的內(nèi)容就是地址 與地址產(chǎn)生直接聯(lián)系
- 引用不占用內(nèi)存空間 指針占用
- 不存在引用的引用 指針可以有引用
指針的引用
int *p; //定義指針變量p
int *&rp = p; //創(chuàng)建p的引用rp什荣,rp是指針類型
int m =10;
rp = &m; //rp儲存m的地址
2. 引用作為函數(shù)返回值
當(dāng)函數(shù)返回值是引用:
- 接受返回值的變量也是引用:創(chuàng)建了一個(gè)對返回變量的引用
- 接受返回值的變量不是引用:將函數(shù)返回值直接賦給這個(gè)變量
函數(shù)返回值不是引用:
- 不能用引用接收這個(gè)返回值
3.常引用
- 若一個(gè)函數(shù)的返回值為引用 則這個(gè)值不能是常量 如:
int & bard()
{
return 3;
}
- 需要聲明為常引用 此時(shí)返回值可以是常量 如:
const int & bard()
{
return 3;
}
- 在程序中創(chuàng)建了常引用 則不能通過常引用來更改引用對象的值 只能對原對象修改
- 函數(shù)形參為常引用時(shí) 相應(yīng)實(shí)參可以使常量或變量表達(dá)式 如果函數(shù)形參為非常引用 則相應(yīng)實(shí)參必須為左值 如
void f( int & i)
{
i =100;
}
main()
{
int a = 1;
f(1);
f(a);
}