C++ 引用
2022-07-04 本文已影响0人
付凯强
引用变量是一个别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用和指针的不同
- 不存在空引用。引用必须连接到一块合法的内存。
- 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
- 引用必须在创建时被初始化。指针可以在任何时间被初始化。
创建引用
试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。因此,您可以通过原始变量名称或引用来访问变量的内容。例如:
int i = 10;
int& y = i;
printf("i = %d ",y);
& 读作引用,第二行读作 "y 是一个初始化为 i 的整型引用"。
引用作为参数
int a = 1;
int b = 2;
swap(b,a);
printf("swap a = %d ",a);
printf("swap b = %d ",b);
int& aa = a;
int& bb = b;
swapQuote(bb,aa);
printf("swapQuote a = %d ",a);
printf("swapQuote b = %d ",b);
void swap(int a ,int b) {
int temp;
temp = a;
a = b;
b = temp;
}
void swapQuote(int& a, int& b) {
int temp;
temp = a;
a = b;
b = temp;
}
swap a = 1 swap b = 2 swapQuote a = 2 swapQuote b = 1
swap并不能发生值交换的原因是swap方法操作的是形参,而swapQuote方法操作的是实参。普通的形参只是对实参的值进行了复制,也就是形参不会改实参的值。
引用作为返回值
int& add(int a,int b) {
int sum = (a +b);
static int& s = sum;
return s;
}
当返回一个引用时,要注意被引用的对象不能超出作用域。所以返回一个对局部变量的引用是不合法的,但是,可以返回一个对静态变量的引用。
参考
https://www.runoob.com/cplusplus/returning-values-by-reference.html