C++引用
C++引用
引用变量是一个别名,它是某个已存在变量的另一个名字。
把引用初始化为某个变量,就可以使用该引用名称或变量名称来指向变量。
引用必须在定义时初始化,并且一旦绑定到一个变量后,就不能再绑定到其他变量。
int a=10;
int &ref=a; //ref是a的引用,对ref的操作会直接作用于a
C++引用 vs 指针
不同点
-
不存在空引用,引用必须连接到一块合法的内存
-
一旦引用被初始化为一个对象,就不能被指向到另一个对象。指针可以在任何时候指向到另一个对象
-
引用必须在创建时被初始化/指针可以在任何时间被初始化
-
引用的对象必须是一个变量,而指针必须是一个地址
| 特性 | 引用 | 指针 |
|---|---|---|
| 定义与初始化 | 必须初始化,且不能为null | 可以不初始化,可以在后续代码中指向其他对象,可以为null |
| 语法 | 使用&声明 | 使用*声明 |
| 重新绑定 | 不能重新绑定,一旦初始化后始终引用同一个对象 | 可以重新指向其他对象 |
| 空值(Nullability) | 不能为null,必须绑定到有效的对象 | 可以为null,表示不指向任何对象 |
| 内存占用 | 不占用额外内存(编译器通常将其优化为直接操作所引用的对象) | 占用额外内存(存储地址,通常是一个机器字长,如4字节或8字节) |
| 访问方式 | 直接访问,无需解引用操作符,例如:ref=10; | 需要使用*解引用操作符访问或修改所指向的对象,例如:*ptr=10 |
| 多级间接访问 | 不支持多级间接访问(不能有引用的引用) | 支持多层间接访问(如指针的指针:int **pptr;) |
| 函数参数传递 | 常用于函数参数传递,语法简洁 | 也可用于函数参数传递,但需要使用解引用操作符 |
| 数组与引用 | 不能直接创建引用数组,但可以创建数组的引用,例如:int (&ref)[10]=arr; |
可以创建指针数组,也可以创建指向数组的指针,例如:int *ptrArr[10]; |
| 安全性 | 更安全,不能为null,且语法直观 | 更灵活,但容易出错(如空指针、野指针等) |
| 底层实现 | 通常通过指针实现,但编译器会优化为直接操作所引用的对象 | 直接存储目标对象的内存地址 |
C++中创建引用
变量名称是变量附属在内存位置中的标签,引用是变量附属在内存位置中的第二个标签。
可以通过原始变量名称或引用来访问变量的内容。
引用通常用于函数参数列表和函数返回值
| 概念 | 描述 |
|---|---|
| 把引用作为参数 | C++支持把引用作为参数传给函数,这比一般的参数更安全 |
| 把引用作为返回值 | 可以从C++函数中返回引用,就像返回其他数据类型一样 |

浙公网安备 33010602011771号