1.創(chuàng)建引用變量
int rats;
int &rodents = rats;
&不是取地址運(yùn)算符,而是引用變量的定義,rats與rodents指向同一內(nèi)存地址,引用變量是另一個(gè)別名,可以理解為一個(gè)變量?jī)蓚€(gè)名字,對(duì)其中一個(gè)進(jìn)行操作缎讼,另一個(gè)也會(huì)隨之改變。
int rats = 10;
int &rodents = rats;
cout << &rats << endl;
cout << &rodents << endl;
rodents++;
cout << rats << endl;
cout << rodents << endl;
003CF88C ##rats與rodents指向同一內(nèi)存地址
003CF88C
11
11
下面我們寫一個(gè)交換函數(shù)來(lái)進(jìn)一步體會(huì)一下引用
void swap(int &x, int &y) ##參數(shù)按引用傳遞
{
int tmp = x;
x = y;
y = tmp;
}
void swapv(int x,int y) ##參數(shù)按值傳遞
{
int tmp = x;
x = y;
y = tmp;
}
int main()
{
int a = 10;
int b = 20;
swapv(a, b);
cout << a << endl;
cout << b << endl;
}
10
20
按值傳遞并沒有成功交換坑匠,過(guò)程是這樣的血崭,首先創(chuàng)建變量a,b厘灼,然后將
參數(shù)傳給swapv函數(shù)夹纫,在參數(shù)傳遞中是創(chuàng)建在swapv函數(shù)作用域的新臨
時(shí)變量x,y,這個(gè)x,y相當(dāng)于a手幢,b的副本捷凄,下面的交換操作也就是對(duì)a,b的
副本的操作,函數(shù)結(jié)束后围来,臨時(shí)變量消亡跺涤,也就是a,b的副本生命周期
結(jié)束了监透,但是并沒有傳回給主函數(shù)的a桶错,b,所以導(dǎo)致交換失敗胀蛮。
int main()
{
int a = 10;
int b = 20;
swap(a, b);
cout << a << endl;
cout << b << endl;
}
20
10
而使用按引用傳遞創(chuàng)建的x,y院刁,是a,b變量的別名粪狼,指向同一塊內(nèi)存具有
相同的地址退腥,對(duì)x任岸,y的操作也就是對(duì)a,b的操作所以交換成功狡刘。
區(qū)別:
引用必須在聲明時(shí)初始化享潜,一旦初始化不可再引用其他變量(引用變量不能被賦值)