• 指针引用的区别


    区别:

    1. 指针是对象,引用不是;

    2. 声明引用必须初始化,声明指针可以不初始化(但一般建议初始化);

    3. 指针可以绑定新的对象(花心大萝卜),而引用不可以(从一而终);

    4. 在作为参数时,引用要比指针高效,因为指针要发生实参到形参的拷贝,而引用不需要。

    实现机制:底层都是指针,都要分配内存(至少从汇编层面看是这样的)

     1 #include <iostream>
     2 using namespace std;
     3 
     4 int main()
     5 {
     6     int i = 100, other = 999;
     7     int &rr = i;//必须初始化
     8     int *p = &i;//可以不初始化
     9 
    10     return 0;
    11 }

    瞧一瞧汇编

    7:         int &rr = i;//必须初始化
    00401056   lea         eax,[ebp-4]
    00401059   mov         dword ptr [ebp-0Ch],eax
    8:         int *p = &i;//可以不初始化
    0040105C   lea         ecx,[ebp-4]
    0040105F   mov         dword ptr [ebp-10h],ecx
    lea         eax,[ebp-4] //将【ebp-4】中的值的地址存入eax中(也就是把ebp-4存入eax中)
    mov         dword ptr [ebp-0Ch],eax //将eax的地址存入地址为【ebp-0ch】的指针中

    指针和引用在汇编里头看是一毛一样的,可见引用还是用指针来实现的,没什么稀奇。

    值传递、指针传递、引用传递

    值传递: 实参初始化形参,二者互不影响;

    指针传递: 发生了指针的拷贝,还是两个对象,但是指向同一块内存/对象,可以通过形参指针修改对象值;

    引用传递: 别名,不发生拷贝,可以直接使用原对象,但我们一般用const限定常量引用,防止该值。const string &s;

  • 相关阅读:
    一个前端框架应该有的一些公共函数
    前端开发避免bug注意事项
    angular中iframe的ng-src属性
    jquery上传base64位图片
    [Luogu]P2302 loidc,跑起来
    情书
    SA学习笔记
    关于GCD的证明
    文本生成器(AC自动机 + DP)
    AC自动机--速成版
  • 原文地址:https://www.cnblogs.com/yocichen/p/10374076.html
Copyright © 2020-2023  润新知