美文网首页
《c++primer》引用

《c++primer》引用

作者: new_liziang | 来源:发表于2019-02-20 09:05 被阅读0次

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的操作所以交换成功。

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

相关文章

网友评论

      本文标题:《c++primer》引用

      本文链接:https://www.haomeiwen.com/subject/mqwoeqtx.html