C++(16):“”符号
目录
一、取地址运算符(用于变量前)
二、引用声明符(用于数据类型后)
1. 基本引用
2. 函数参数传递
3. 范围for循环修改容器
三、引用 vs 指针
四、关键点总结
一、取地址运算符(用于变量前)
作用:获取变量的内存地址
特点:返回指针类型,可与指针配合使用
int main() {int a = 5;int* ptr = &a; // 取a的地址,赋值给指针ptr*ptr = 10; // 通过指针修改a的值// 此时 a = 10return 0;
}
二、引用声明符(用于数据类型后)
作用:为变量创建别名(左值引用),给已定义的变量起别名,不可存在空引用!
特点:必须初始化、不可为空、不可重新绑定
int main(){int a = 1;int &b = a;&c = b;//变量b和c的类型是“int &”,整型引用cout << b; //输出10c++;cout << a; //输出11,C是a的引用(别名),c自增=a自增
}
1. 基本引用
int main() {int b = 20;int& ref = b; // ref是b的别名ref = 30; // 等同于 b = 30// 此时 b = 30return 0;
}
2. 函数参数传递
引用常用于避免拷贝并直接修改实参:
void increment(int& num) {num++; // 直接修改外部变量
}int main() {int x = 5;increment(x); // x变为6return 0;
}
3. 范围for循环修改容器
#include <vector>
int main() {std::vector<int> nums{1, 2, 3};for (int& num : nums) {num *= 2; // 直接修改容器元素}// nums变为{2, 4, 6}return 0;
}
三、引用 vs 指针
特性 | 引用 | 指针 |
---|---|---|
初始化 | 必须初始化 | 可延迟初始化(危险) |
空值 | 不可为空 | 可指向nullptr |
重绑定 | 不可重新绑定 | 可改变指向 |
语法操作 | 直接使用(无需* ) | 需用* 解引用 |
内存占用 | 无独立内存(别名) | 占用内存存储地址 |
四、关键点总结
-
引用是别名:
int& ref = a;
后,ref
和a
是同一块内存的两个名字。 -
必须绑定实体:引用必须初始化且必须指向已存在的变量。
-
函数参数高效传递:引用避免拷贝大型对象(如
void func(const std::string& str)
)。 -
不可空特性:引用的安全性高于指针,但牺牲了灵活性。