• 指针引用的区别


    区别:

    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;

  • 相关阅读:
    Service Name Port Number Transport Protocol tcp udp 端口号16bit
    linux linux 互传文件 win 不通过 ftp sftp 往linux 传文件(文件夹)
    soft deletion Google SRE 保障数据完整性的手段
    Taylor series
    Taylor's theorem
    Moving average
    REQUEST
    Unix file types
    mysqld.sock
    Tunneling protocol
  • 原文地址:https://www.cnblogs.com/yocichen/p/10374076.html
Copyright © 2020-2023  润新知