C++八股文 004:指针和引用

指针和引用是C++中两种不同的间接访问机制,它们都允许我们通过一个别名来操作其他变量或对象。以下是它们的主要异同点:

相同点:

  1. 间接访问:两者都可以用来间接访问存储在内存中其他位置的对象。
  2. 类型要求:指针和引用都需要与它们所指向或引用的对象类型相匹配。

不同点:

  1. 定义方式

    • 指针使用星号 * 定义,如 int *p;,并用 & 获取对象地址进行初始化,例如 p = &someInt;
    • 引用使用 & 符号定义,并在声明时初始化,如 int &ref = someInt;
  2. 空值

    • 指针可以被赋值为 nullptr 或 0(NULL),表示不指向任何对象。
    • 引用必须始终关联到一个有效的对象,不能引用未初始化的或者不存在的对象。
  3. 内存占用

    • 指针本身占用一定大小的内存空间来存储它所指向的对象的地址。
    • 引用不占用额外的内存,它只是一个已存在对象的别名
  4. 可变性

    • 指针可以改变它所指向的对象。
    • 引用一旦初始化后就无法改变引用的对象,它总是绑定到同一个对象上。
  5. 解引用

    • 使用指针需要解引用以访问其指向的对象,如 *p;
    • 引用可以直接作为对象使用,无需解引用。
  6. const性质

    • 指针可以有const限定,如 const int *p; 表示不能通过指针修改所指对象;int *const p; 表示指针本身不可变。
    • 引用本质上就是常量,一旦初始化后就不能改变引用的关系,所以没有对应的const修饰符,但可以有对常量对象的引用(如 const int &ref)。
  7. sizeof操作符

    • 对于指针,sizeof 返回的是指针本身的大小。
    • 对于引用,sizeof 返回的是引用对象的实际大小,因为它不是一个独立的实体。
  • 16
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值