c++基础 引用和指针

引用指针是 C++ 中两种重要的机制,用于间接访问和操作对象。它们有相似之处,但也有显著的区别。以下是对引用和指针的详细对比和解释:


1. 基本概念

指针(Pointer)
  • 指针是一个变量,存储的是另一个对象的内存地址。
  • 指针可以为空(nullptr),表示不指向任何对象。
  • 指针需要通过 -> 访问成员
引用(Reference)
  • 引用是变量的别名,操作引用相当于操作原变量。
  • 引用必须在声明时初始化,且不能改变其绑定的对象。
  • 引用传递避免了拷贝开销,适合传递较大的对象。
void setCard(Card &card);
使用场景

当你希望函数直接修改传入的对象时,使用引用。

Card myCard;
setCard(myCard); // 直接修改 myCard

注意事项

如果不需要修改传入的对象,可以使用 const 引用:

void setCard(const Card &card);

2. 语法对比

指针
  • 声明指针:
    int *p;
    
  • 获取地址:
    int x = 10;
    p = &x; // p 指向 x 的地址
    
  • 解引用指针:
    *p = 20; // 修改 x 的值为 20
    
引用
  • 声明引用:
    int x = 10;
    int &r = x; // r 是 x 的引用
    
  • 使用引用:
    r = 20; // 修改 x 的值为 20
    

3. 主要区别

特性 指针 (*) 引用 (&)
初始化 可以不初始化(但建议初始化为 nullptr 必须在声明时初始化
空值 可以为 nullptr 不能为空,必须绑定到有效对象
重新绑定 可以指向不同的对象 不能重新绑定,始终指向初始对象
内存地址 指针本身占用内存(存储地址) 引用不占用额外内存(是别名)
访问成员 使用 ->(如 p->doSomething() 使用 .(如 r.doSomething()
安全性 可能为空或悬空,需要检查 始终有效,无需检查
用途 动态内存管理、多态、可选参数 避免拷贝、函数参数传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值