引用

作者: 夜雨聲煩_ | 来源:发表于2021-06-22 09:52 被阅读0次

    参数的传递本质上是一次赋值的过程,赋值就是对内存进行拷贝。所谓内存拷贝,是指将一块内存上的数据复制到另一块内存上。
    对于像 char、bool、int、float 等基本类型的数据,它们占用的内存往往只有几个字节,对它们进行内存拷贝非常快速。而数组、结构体、对象是一系列数据的集合,数据的数量没有限制,可能很少,也可能成千上万,对它们进行频繁的内存拷贝可能会消耗很多时间,拖慢程序的执行效率。
    C/C++ 禁止在函数调用时直接传递数组的内容,而是强制传递数组指针。而对于结构体和对象没有这种限制,调用函数时既可以传递指针,也可以直接传递内容;为了提高效率,建议传递指针。
    引用(Reference)是 C++ 相对于 C 语言的又一个扩充。引用可以看做是数据的一个别名,通过这个别名和原来的名字都能够找到这份数据。
    引用的定义方式类似于指针,只是用&取代了*,语法格式为:
    type &name = data;
    type 是被引用的数据的类型,name 是引用的名称,data 是被引用的数据。引用必须在定义的同时初始化,并且以后也要从一而终,不能再引用其它数据,这有点类似于常量(const 变量)。

    int a = 99;
    int b =a;
    int &r = a;
    cout<<a<<", "<<b<<", "<<r<<endl;
    cout<<&a<<", "<<&b<<", "<<&r<<endl;;
    //99, 99, 99
    //0x7ffeefbff54c, 0x7ffeefbff548, 0x7ffeefbff54c
    

    可以看出不同于b变量的新地址,&r使用了和a一样的地址,r和a内容也一样。
    &r表示r变量自己没有内存,而是直接指向a的内存地址。ra内容一样,&r&a地址一样。

    int a2 = 99;
    int *r2 = &a2;
    *r2 = 18;
    cout<<r2<<", "<<*r2<<", "<<a2<<endl;
    //0x7ffeefbff53c, 18, 18
    

    int *&a2都是地址,才能赋值,int *r2=a2会报错。所以r2的内容表示a2的地址,*r2表示a2的值。

    相关文章

      网友评论

          本文标题:引用

          本文链接:https://www.haomeiwen.com/subject/rzazsltx.html