引用和指针

引用

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*的视角来看,内存空间仅仅是内存空间,没办法访问空间中所存的对象。

指针和引用的主要区别

指针“指向”内存中的某个对象,而引用“绑定到”内存中某个对象,它们都实现了对其他对象的间接访问,二者的区别主要有两方面:

第一,指针本身就是一个对象,允许对指针赋值和拷贝,而且在指针的生命周期内可以指向几个不同的对象;引用不是一个对象,无法令引用重新绑定到另外一个对象。

第二,指针无须在定义时赋初值,和其他内置类型一样,在块作用域内定义的指针如果没有被初始化,也将拥有一个不确定的值;引用则必须在定义时赋初值。

posted @   Happinesspill  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
· Manus的开源复刻OpenManus初探
点击右上角即可分享
微信分享提示