C++ 引用详解
C++ 引用是一种强大的语言特性,允许程序员在编程时更方便地使用变量。它是一种别名,也就是说,它是某个已存在变量的另一个名字。一旦把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
C++ 引用 vs 指针
C++ 引用容易与指针混淆,但是它们之间有三个主要的不同:
1. 不存在空引用。引用必须连接到一块合法的内存。
2. 一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象。
3. 引用必须在创建时被初始化。指针可以在任何时间被初始化。
C++ 中创建引用
试想变量名称是变量附属在内存位置中的标签,您可以把引用当成是变量附属在内存位置中的第二个标签。因此,您可以通过原始变量名称或引用来访问变量的内容。
例如:
```cpp
int i = 17;
int& r = i; // 声明引用变量 r
double& s = d; // 声明引用变量 s
```
在这些声明中,& 读作引用。因此,第一个声明可以读作 "r 是一个初始化为 i 的整型引用",第二个声明可以读作 "s 是一个初始化为 d 的 double 型引用"。
使用引用访问变量
可以通过原始变量名称或引用来访问变量的内容。例如:
```cpp
int i = 5;
int& r = i; // 声明引用变量 r
cout << "Value of i : " << i << endl; // 输出 i 的值
cout << "Value of i reference : " << r << endl; // 输出 r 的值
```
这两个输出语句将输出相同的值,因为 r 是 i 的引用。
使用引用作为函数参数
C++ 支持把引用作为参数传给函数,这比传一般的参数更安全。例如:
```cpp
void swap(int& x, int& y); // 函数声明
int main() {
int a = 100;
int b = 200;
cout << "交换前,a 的值:" << a << endl;
cout << "交换前,b 的值:" << b << endl;
swap(a, b); // 调用函数来交换值
cout << "交换后,a 的值:" << a << endl;
cout << "交换后,b 的值:" << b << endl;
return 0;
}
void swap(int& x, int& y) {
int temp;
temp = x; // 保存地址 x 的值
x = y; // 把 y 赋值给 x
y = temp; // 把 x 赋值给 y
return;
}
```
这段代码使用了引用作为函数参数,实现了交换两个变量的值。
把引用作为返回值
可以从 C++ 函数中返回引用,方式与返回其他数据类型一样。通过使用引用来替代指针,会使 C++ 程序更容易阅读和维护。例如:
```cpp
double vals[] = {10.1, 12.6, 33.1, 24.1, 50.0};
double& setValues(int i) {
return vals[i]; // 返回第 i 个元素的引用
}
int main() {
cout << "改变前的值" << endl;
for (int i = 0; i < 5; i++) {
cout << "vals[" << i << "] = " << setValues(i) << endl;
}
return 0;
}
```
这段代码使用了引用作为返回值,返回了数组中的某个元素的引用。
C++ 引用是一种强大的语言特性,允许程序员在编程时更方便地使用变量。它可以用作函数参数、返回值,提高了程序的可读性和维护性。