03 指针与引用

1 指针

  • 指针是一种存储地址的变量
  • 在指针变量的生命周期种可以先后指向不同的对象
  • 指针变量初始化时,可以不用赋初值(会拥有一个不确定的值),但是尽量赋值nullptr

2 引用

  • 引用就是给一个变量(对象)起一个别名
  • 绑定:引用初始化就需要赋值,然后引用就会永远跟这个对象绑定在一起
  • 引用本身不是对象
  • 引用的底层实现:
    (1)在底层实现中,引用所占用的内存空间大小通常与指针相同。也就是说,当定义一个引用时,底层实现可能会为其分配与指针相同大小的内存空间,用于存储该引用所引用的变量的内存地址。
    (2)从内存空间的角度来看,虽然引用本身不会占用额外的内存,但它可能会包含一个指向已经分配了内存空间的变量的指针,所以其底层实现可能会占用与指针相同大小的内存空间。
    (3)例子:
     int a = 100;
     int& b = a;  // 定义一个整型引用b,它的值等于a的内存地址

在上面的代码中,引用b在底层实现上其实被视为一个指向a的指针,当在程序中使用b时,底层的实现会自动解引用它,并使用a的值。

3 指针与引用的区别

(1)相同点:

  • 访问变量。指针和引用都可以用于访问和操作变量的值。
  • 在函数之间传递参数。指针和引用都可以被用来传递参数到函数中。
  • 本质上都是地址。指针和引用本质上都是变量的地址。
  • 修改变量的值。指针和引用都可以被用来修改变量的值。

(2)不同点:

  • 操作方式不同:指针可以进行指针运算,可以通过指针加减来访问不同内存地址上的数据。而引用则不支持指针运算,只能通过其别名来访问数据。

  • 空指针
    指针可以是空指针(nullptr或NULL),可以用来表示指针不指向任何内存地址。而引用则必须在定义时进行初始化,并且必须引用一个已经存在的对象或变量,所以引用不会成为空引用。

  • 引用更安全
    由于引用必须在定义时进行初始化,并且无法让引用的对象更换,所以它有更好的类型安全,不会发生空指针引用或越界访问等问题。

  • 内存管理
    在指针中,需要程序员手动的进行内存管理,如动态内存申请,内存释放等操作。如果管理不当,就容易导致内存泄漏等问题。而引用则不需要进行内存管理,因为引用仅仅是一个别名。但是,在指针中也可以使用智能指针等方式来辅助管理内存,提高内存处理的安全性。

  • 为函数参数
    当作为函数参数时,引用会直接对传递进来的变量进行修改,而对于指针,则需要对指向指针变量的地址进行操作,例如对指针本身赋值、修改指针指向的对象等操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值