一。指针和引用的概念
**指针:**指针是一个变量,其值为另一个变量的内存地址。我们可以通过指针来间接访问和修改它所指向的变量的值。
int main() { int x = 10; int* ptr = &x; // 指针 ptr 指向 x 的地址 cout << "x 的值:" << x << endl; // 直接访问 x cout << "x 的地址:" << &x << endl; // 输出 x 的地址 cout << "ptr 的值:" << ptr << endl; // 输出 ptr 存储的地址(即 x 的地址) cout << "ptr 指向的值:" << *ptr << endl; // 通过指针访问 x 的值 *ptr = 20; // 通过指针修改 x 的值 cout << "修改后 x 的值:" << x << endl; return 0; }
**引用:**引用是已存在变量的别名,它与被引用的变量共享同一内存地址。引用一旦初始化后,就不能再指向其他变量。
int main() { int x = 10; int& ref = x; // ref 是 x 的引用(别名) cout << "x 的值:" << x << endl; cout << "ref 的值:" << ref << endl; cout << "x 的地址:" << &x << endl; cout << "ref 的地址:" << &ref << endl; // 与 x 的地址相同 ref = 20; // 通过引用修改 x 的值 cout << "修改后 x 的值:" << x << endl; return 0; }
二。指针与引用的核心区别
1. 声明与初始化
- 指针:使用
*声明,可以不初始化(但不推荐),也可以初始化为nullptr
int* ptr1; // 未初始化的指针(危险) int* ptr2 = nullptr; // 空指针 int x = 5; int* ptr3 = &x; // 指向 x 的指针
- 引用:使用
&声明,必须在创建时初始化,且不能初始化为**nullptr**
int x = 5; int& ref1 = x; // 正确,ref1 是 x 的引用 // int& ref2; // 错误,引用必须初始化 // int& ref3 = nullptr; // 错误,不能将引用初始化为空
2. 可修改性
- 指针:可以改变指向的对象
int x = 5, y = 10; * ptr = &x; ptr = &y;

