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

    


2、下面开始总结:   

    2.1 引用类型与原类型保持一致,且不分配内存。与被引用的变量有相同的地址。

    2.2 声明的时候必须初始化,一经声明,不可变更。(int & c,像这样不初始化是错的)

    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、返回引用和返回变量的区别:

int& test()
{
    return m_data_;
}

int test()
{
    return m_data_;
}

int& a = test();

结论就是:

    1 返回值为引用型(int& )的时候,返回的是地址。返回值不是引用型(int)的时候,返回的是一个数值。
    编译器会先把这个数值放入一个内存中,再把这个地址付给a,此时的a代表的地址和 m_data_代表的地址是不一样。
    
    2 不要在返回值为引用的函数中返回局部变量,因为当函数结束时,临时对象将消失,因此这种引用是非法的,在这种情况下,应返回对象。


6、const引用

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

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

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值