C++ 指针*与引用&的区别

本文详细对比了C++中指针与引用的用法差异,包括它们的写法、是否具有实体、初始化需求、能否为空、sizeof函数的计算结果、是否能改变值、是否存在多级形式以及安全性等方面。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在C++中,指针*(pointer)与引用&(reference)的用法十分相似,但还是有一些区别的。我做了如下总结:

指针*引用&
写法int* p1 = #int& r1 = num;
有无实体指针是实体,有空间,有数据引用是别名,没有空间
初始化定义时可以不初始化定义时必须初始化int&r; //出错:引用必须初始化
为空可以为空,但为防止其为空,指针总是需要被测试它的合法性不能为空,引用必须与一块合法的存储单元关联,但这也意味着使用引用的代码效率比使用指针的要高,因为在使用引用之前不需要测试它的合法性
sizeof()函数sizeof(指针):计算的是指针本身的大小sizeof(引用):计算的是它引用的对象的大小
改变值改变指针的值,就是改变指针本身的值(改变了指针指向的地址)int* p1 = &num1; p1 = &num2; //指针p1的值被改变(从指向num1的地址变成了指向num2的地址)改变引用的值,即是在改变对引用的变量的值,而引用本身不能改变。int& r1 = num1; r1 = num2; //引用r1未被改变,改变的是num1的值(num1的值变为了num2)
多级可以存在多级指针int** p1; //合法。指向指针的指针 int*& p2; //合法。指向指针的引用不存在多级引用int&* p3; //非法。指向引用的指针是非法的 int&& p4; //非法。指向引用的引用是非法的
安全性没有引用安全:1. 指针需要空间,需要向系统申请内存和释放内存 2. 指针指向的地址可以随意改变较安全:1. 引用不关心内存申请和释放问题,不会存在内存泄漏 2. 引用的对象一旦确定就不可改变 3. 引用的生命周期就在函数体内,离开作用域就不存在了,比较安全
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值