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的操作所以交换成功。
区别:
引用必须在声明时初始化,一旦初始化不可再引用其他变量(引用变量不能被赋值)
网友评论