C++ 变量的引用 &

创建变量的引用:int &a = b;  

引用变量a是变量b的别名;对引用操作和对变量本身操作完全相同

注意:与typedef的区别:

typedef对数据类型起别名,&对变量起别名

比如:int num=100;

对int起别名用typedef

对num起别名,用&

注意:引用必须在定义时同时初始化,初始化后绑定的变量不能修改

 

int a = 100;
    const int& b = a;//常引用
    //int const & b=a;    与上面等价
    //不能通过常引用b来修改变量值

    //b = 50;  错
    a = 50;

    //普通引用只能用作左值;常引用也叫万能引用,左值右值都可以
    //int& i = 111;   普通引用--错
    const int& i = 111;
    int a[3] = { 10,20,30 };
    int(&aa)[3] = a;//数组的引用
#include <iostream>
using namespace std;

int add(int a, int b) {
    return a + b;
}


int main()
{
    
    int(&f)(int, int) = add;//函数的引用
    int x = f(10, 20);
    cout << x << endl;
        return 0;
    
}

主要用途一:用作函数的形参,通过将引用变量用作参数,函数将使用原始数据而不是其拷贝

void swip(int &a, int &b)  //a是i的引用,a和i的数据地址相同;b是j的引用,b和j的数据地址相同
{
    int s;
    s = a;
    a = b;
    b = s;
}

int main()
{
    int i = 100;
    int j = 10;
    swip(i, j);//ab数据交换后,ij的数据也就交换了
    cout << "i="<<i << endl;
    cout << "j=" << j << endl;
        
}

用途二: 返回值引用

#include <iostream>
using namespace std;

struct A {
    int data;
    int& func(void) {
        return data;  //返回变量data的引用
        //返回值变成了左值
    }
};

int main()
{
    
    A a = { 105 };
    cout << a.data << endl;
    a.func() = 200;
    //a.func()是a.data的引用,a.func()是a.data的别名
    //所以这句是修改a.data的值
    cout << a.data << endl;
        return 0;
    
}

 引用的本质就是指针

原文地址:https://www.cnblogs.com/liming19680104/p/10528647.html