《c++primer》引用

1.创建引用变量
int rats;
int &rodents = rats;
&不是取地址运算符,而是引用变量的定义,rats与rodents指向同一内存地址,引用变量是另一个别名,可以理解为一个变量两个名字,对其中一个进行操作,另一个也会随之改变。

int rats = 10;
int &rodents = rats;
cout << &rats << endl;
cout << &rodents << endl;
rodents++;
cout << rats << endl;
cout << rodents << endl;

003CF88C            ##rats与rodents指向同一内存地址
003CF88C
11
11

下面我们写一个交换函数来进一步体会一下引用

void swap(int &x, int &y)          ##参数按引用传递
{
    int tmp = x;
    x = y;
    y = tmp;
}
void swapv(int x,int y)         ##参数按值传递
{
    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
按值传递并没有成功交换,过程是这样的,首先创建变量a,b,然后将
参数传给swapv函数,在参数传递中是创建在swapv函数作用域的新临
时变量x,y,这个x,y相当于a,b的副本,下面的交换操作也就是对a,b的
副本的操作,函数结束后,临时变量消亡,也就是a,b的副本生命周期
结束了,但是并没有传回给主函数的a,b,所以导致交换失败。
   
int main()
{
    int a = 10;
    int b = 20;
    swap(a, b);               
    cout << a << endl;
    cout << b << endl;
}

20
10 
而使用按引用传递创建的x,y,是a,b变量的别名,指向同一块内存具有
相同的地址,对x,y的操作也就是对a,b的操作所以交换成功。

区别:
引用必须在声明时初始化,一旦初始化不可再引用其他变量(引用变量不能被赋值)

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容