引用和指针
引用
C++11中新增了“右值引用”,主要用于内置类,当我们使用术语“引用”时,指的是“左值引用”。
引用(reference)为对象起另一个名字,即别名。
引用不是对象,只是已经存在对象的另一个名字。定义一个引用时,必须将引用与它的初始值绑定在一起,且一直绑定在一起,无法令引用重新绑定到另外一个对象,因此引用必须初始化。
引用不是对象,所以不可以定义引用的引用。
引用只能绑定到对象上,不可以绑定到字面值(包括字符串)、某个表达式的计算结果绑定到一起。
指针
与引用类似,指针也是实现了对其他对象的间接访问
指针本身就是一个对象,占据内存空间,允许对指针进行赋值和拷贝,指针的生命周期可以先后指向几个不同的对象。
指针无须在定义时赋初值,与其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值。
空指针
生成空指针的方法:
int *p1 = nullptr;
int *p2 = 0;
// 需要包含#include <cstdlib>
int *p3 = NULL;
过去的程序使用NULL的预处理变量来给指针赋值,使用NULL和用0初始化指针是一样的。C++11新引入的方法nullptr,是一种特殊的字面值,可以转化为任意其他类型的指针类型。在新标准下,最好使用nullptr,同时避免使用NULL。
void* 指针
void* 指针是一种特殊类型的指针,可用于存放任意对象的地址。一个void*指针存放着一个地址,只是对该地址中存放的什么类型的对象并不清楚。
void*指针能做的事非常有限,拿他和别的指针比较、作为函数的输入输出、赋值给另外一个void*指针。
不能直接操作void*指针所指的对象,因为不知道对象的类型,也就无法确定能做什么操作。
void*的视角来看,内存空间仅仅是内存空间,没办法访问空间中所存的对象。
指针和引用的主要区别
指针“指向”内存中的某个对象,而引用“绑定到”内存中某个对象,它们都实现了对其他对象的间接访问,二者的区别主要有两方面:
第一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内可以指向几个不同的对象;引用不是一个对象,无法令引用重新绑定到另外一个对象。
第二,指针无须在定义时赋初值,和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值;引用则必须在定义时赋初值。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探