cpp 指针VS引用

1. 语法差异

指针:
  • 在声明时需要使用星号 *
  • 使用时需要通过解引用(dereference)操作符 * 访问指向的对象。
  • 可以赋值为 NULL 或重新指向其他对象。
引用:
  • 在声明时不需要星号 *
  • 语法格式:

    类型& 引用名 = 已存在变量名;
  • 使用时不需解引用操作符 *,可以直接使用。
  • 不能赋值为 nullptr 或重新指向其他对象。

2. 初始化

指针:
  • 可以在声明时不进行初始化。
  • 可以在任何时候被初始化为 NULL 或指向其他对象。
引用:
  • 必须在声明时初始化。
  • 一旦初始化后,不能重新绑定到其他对象。

3. 存储位置

指针:
  • 指针本身存储的是一个内存地址
  • 指针的值可以改变。
引用:
  • 引用本身不是一个独立的对象,而是另一个对象的别名
  • 引用的绑定不能改变。

4. 语义差异

指针:
  • 更加灵活,可以用来实现复杂的内存管理。
  • 更容易出错,特别是忘记解引用或访问 NULL 指针等。
引用:
  • 更加安全,因为引用始终绑定到一个有效的对象。
  • 语义上更清晰,因为引用直接表示一个对象。

5. 使用场景

指针:
  • 适用于需要频繁改变指向的情况。
  • 适用于底层的内存管理,如动态数组、链表等。
引用:
  • 适用于不需要改变绑定的情况。
  • 适用于函数参数传递,特别是需要修改对象的情况。

6. 例子

指针示例:

Cpp

#include <iostream>

int main() {
    int a = 10;
    int *ptr = nullptr; // 指针初始化为nullptr
    
    ptr = &a; // 指针指向a
    *ptr = 20; // 修改a的值

    std::cout << "Value of a using pointer: " << *ptr << std::endl;
    
    return 0;
}
引用示例:

Cpp

#include <iostream>

int main() {
    int a = 10;
    int &ref = a; // 引用初始化为a
    
    ref = 20; // 修改a的值

    std::cout << "Value of a using reference: " << ref << std::endl;
    
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值