一、C++引用用法入门
引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。类似与Window的快捷方式或者人的绰号。 例子:
int main() {
int a = 99;
int &r = a;
cout << a << ", " << r << endl;
cout << &a << ", " << &r << endl;
return 0;
}
注意:引用在定义时需要添加&,在使用时不能添加&,使用时添加&表示取地址。引用必须在定义的同时初始化,并且不能引用其它数据。 由于引用和原始变量都指向同一地址,故可以通过引用修改原始变量的数据:
int main() {
int a = 99;
int &r = a;
r = 47;
cout << a << ", " << r << endl;
return 0;
}
如果不希望引用会修改原始的数据,则可添加const限制,如:
int const &r = a;
二、C++引用作为函数参数
在声明定义函数的时候,将函数的形参指定为引用的形式,则在调用函数时,形参和实参都指向同一个地址,从而可以在函数内部影响函数外部数据的效果。
void swap1(int a, int b) {
int temp = a;
a = b;
b = temp;
}
void swap2(int *p1, int *p2) {
int temp = *p1;
*p1 = *p2;
*p2 = temp;
}
void swap3(int &r1, int &r2) {
int temp = r1;
r1 = r2;
r2 = temp;
}
int main() {
int num1 = 10, num2 = 20;
cout << num1 << " " << num2 << endl;
int num3 = 10, num4 = 20;
swap2(&num3, &num4);
cout << num3 << " " << num4 << endl;
int num5=10, num6 = 20;
swap3(num5, num6);
cout << num5 << " " << num6 << endl;
return 0;
}
可以发现,按引用传参的方式更加直观,在C++中,鼓励使用引用。
三、C++引用作为函数返回值
引用除了可以作为函数形参,还可以作为函数返回值:
int &plus10(int &r) {
r += 10;
return r;
}
int main() {
int num1 = 10;
int num2 = plus10(num1);
cout << num1 << " " << num2 << endl;
return 0;
}
注意:不能返回局部数据(局部变量、局部对象、局部数组等)的引用,因为函数调用完局部变量(存储在栈上)会被销毁,下次使用时数据就不一定在了。
int &plus10(int &r) {
int m = r + 10;
return m;
}
int main() {
int num1 = 10;
int num2 = plus10(num1);
cout << num2 << endl;
int &num3 = plus10(num1);
int &num4 = plus10(num3);
cout << num3 << " " << num4 << endl;
return 0;
}
四、C++引用的本质,与指针的区别
|