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

2024-01-02 09:35:30

指针和引用是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?返回的是引用对象的实际大小,因为它不是一个独立的实体。

文章来源:https://blog.csdn.net/k1419197516/article/details/135332531
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。