c++中引用相关概念总结

1、先从下面这段代码的运行结果开始看起:

    int a = 10;  //在内存上开辟4个字节, a就代表这个4个字节内存
    int *p = &a;  //让一个指针 指向这个4个字节的空间
    *p = 20;
    cout << "a = " << a << endl;//20

    int & b = a; //定义一个引用b 指向a, b此时就是变量的a的别名
    b = 40;
    cout << "a = " << a << endl;//40
    cout << "b = " << b << endl;//40

    cout << "&a = " << &a << endl;//0x7ffdb085b99c
    cout << "&b =" << &b << endl;//0x7ffdb085b99c

    //int & c; //只是单纯定义一个引用, 不初始化,   引用一定要初始化

    int &bb = b; //对b引用再次 引用, 实际上是b的别名
    cout << "bb = " << bb << endl;//40

2、下面开始总结:

    2.1 引用类型与原类型保持一致,且不分配内存。与被引用的变量有相同的地 址。
    2.2 声明的时候必须初始化,一经声明,不可变更。
    2.3 可对引用,再次引用。多次引用的结果,是某一变量具有多个别名。
    2.4 &符号前有数据类型时,是引用。其它皆为取地址。

    2.5 在研究引用的时候 ,可以将引用理解为 一个常指针,在理解引用的时候, 可以将引用理解为 一个变量的别名。

3、通过函数对比指针和引用:

3.1

void motifyAA(int *p) //int *p = &a; 
{
    *p = 100;
}

void motifyBB(int &r) //int &r = a; 
{
    r = 200;
}

3.2

void my_swap01(int *a, int *b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}

void my_swap02(int &a, int &b)
{
    int temp = a;
    a = b;
    b = temp;
}

4、引用作为函数的返回值:

int getA1()
{
    int a = 10;
    return a;
} //value_a = a; 

int &getA2()
{
    int a = 10;
    return a;
} //匿名的引用 int & = a;  //  int &temp = &a;

int &getBB()
{
    static int b = 100;
    return b;
}

int value_a = getA1();   //正确

int &r_a = getA2(); //禁止
int &r_b = getBB(); //此时的r_b 就是 getBB中的 static int b

说明:当函数返回引用时,返回的是变量的名称,而不是变量的值,所以如果返回的是函数内部的局部变量,就不可以用引用进行接收。就以getBB()为例,我们实际返回的是b,而不是100;因为我们可以进行如下操作:

getBB() = 3000; //static b  = 3000; 

5、const引用

const int a = 10; // a必须初始化
const int &b = a;

如果是一个const 常量, 必须用const 引用来接收它。

猜你喜欢

转载自blog.csdn.net/amumu_123/article/details/81169807