C学习笔记十五引用
C++学习笔记(十五)——引用
一、 引用
作用: 引用(Reference) 是 C++ 中的一种 变量别名机制,它允许一个变量拥有多个名称。 引用提供了一种安全、简洁的方式来访问变量,而无需使用指针。 特点:
- 引用本质上是变量的别名 ,必须在定义时初始化。
- 引用和原变量共享同一内存地址 ,对引用的修改直接作用于原变量。
- 不能更改引用的绑定对象 ,引用一旦绑定,就不能重新指向其他变量。
二、 引用的基本语法
语法: 数据类型 &引用名 = 原变量; 示例——引用的基本使用: #include using namespace std; int main() { int a = 10; int& ref = a; // ref 是 a 的引用(别名) cout « “a = " « a « “, ref = " « ref « endl; ref = 20; // 修改 ref,相当于修改 a cout « “修改后: a = " « a « “, ref = " « ref « endl; system(“pause”); return 0; } 注意:
ref
是a
的别名,它和a
共享同一块内存 。- 修改
ref
等同于修改a
。
三、 引用 vs 指针
对比项 | 引用(Reference) | 指针(Pointer) |
---|---|---|
是否可为空 | ❌ | ✅ |
是否可更改绑定 | ❌ | ✅ |
访问方式 | 直接使用 | 需要 * 解引用 |
是否必须初始化 | ✅ | ❌ |
适用场景 | 语法简洁,适用于函数参数传递 | 需要动态分配内存、链表等场景 |
示例——引用 vs 指针: | ||
#include | ||
using namespace std; | ||
int main() { | ||
int a = 10; | ||
int& ref = a; // 引用,必须初始化,不能更改绑定 | ||
int* ptr = &a // 指针,可以为空,可以更改指向 | ||
ref = 20; // 修改引用,a 变成 20 | ||
*ptr = 30; // 修改指针指向的值,a 变成 30 | ||
ptr = nullptr; // 正确 允许 | ||
// ref = nullptr; // 错误 不允许 | ||
system(“pause”); | ||
return 0; | ||
} |
四、 引用的应用
(1) 作为函数参数
作用: 引用作为函数参数,可以避免拷贝,提高性能。 示例——传统的值传递(拷贝): #include using namespace std; void modify(int x) // 传值,修改 x 不影响原变量 { x = 100; } int main() { int a = 10; modify(a); cout « “a = " « a « endl; // a 仍然是 10 system(“pause”); return 0; } 示例——引用传递(避免拷贝,提高性能): #include using namespace std; void modify(int& x) // 传引用,修改 x 会影响原变量 { x = 100; } int main() { int a = 10; modify(a); cout « “a = " « a « endl; // a 变成 100 system(“pause”); return 0; } 注意:
- 值传递时,函数参数是变量的副本 ,不会影响原值。
- 引用传递时,函数参数是变量的别名 ,修改它会影响原值。
(2) 作为返回值
作用: 引用可以作为函数的返回值 ,用于返回某个变量的引用。 示例 ——引用作为返回值: #include using namespace std; int& getRef(int& x) { return x; // 返回变量的引用 } int main() { int a = 10; int& ref = getRef(a); // ref 绑定到 a ref = 20; // 修改 ref,相当于修改 a cout « “a = " « a « endl; // 输出 20 system(“pause”); return 0; } 注意:
- 不要返回局部变量的引用,否则指向的内存会被释放,导致未定义行为 。
(3) 引用与 const
(防止修改数据)
作用:
const
引用可以防止误修改变量 ,常用于函数参数 。
示例 ——const
引用:
#include
using namespace std;
void print(const int& x) // 传引用,但不允许修改
{
// x = 20; // 错误,不能修改 x
cout « x « endl;
}
int main() {
int a = 10;
print(a);
system(“pause”);
return 0;
}
注意:
const
引用的作用:
- 防止修改原数据 ,保证安全性。
- 允许传递临时变量 ,而普通引用不允许。
(4) 引用与 STL(标准库)
作用:
C++ STL 广泛使用引用 ,如 for-each
遍历容器。
示例 ——引用遍历vector
:
#include
using namespace std;
#include
int main() {
vector nums = { 1, 2, 3, 4, 5 };
for (int& n : nums) // 使用引用遍历
{
n *= 2; // 直接修改 vector
}
for (int n : nums)
{
cout « n « " “; // 输出 2 4 6 8 10
}
cout « endl;
system(“pause”);
return 0;
}