C++引用

1.基本语法与本质

语法:

类型 &变量2 = 变量1

变量2是变量1的别名,可同时通过变量1和变量2操作同一内存,即变量1所在的内存空间

本质:起小名

2.注意事项

引用必须初始化

引用在初始化后就不能改变了

3.引用作函数参数

常见的函数参数形式一般为

形参(值传递)-不改变原参数值

实参(地址传递)-改变原参数值

对于引用可以认为是简化版的地址传递-会改变原参数值

void swap_yy(int &a , int &b)
{
    int temp = a;
    a = b;
    b = temp;
}
等价于
void swap_dz(int *a,int *b)
{
    int *temp = a;
    a = b;
    b = temp;
}

解释,对于调用swap_yy(a,b)
其参数&a 就是传入a的别名,不过别名和原名一样罢了
所以相当于是对地址的操作,当然原变量也会改变

4.引用作为函数的返回值

注意:

1.不要返回局部变量的引用

由于局部变量存放再栈区,函数运行完毕即释放,但是编译器会保留一次该局部变量的值,实际上已经被释放内存了。因此这样可能会导致返回的是一个不知道指向哪里的地址的值。

int& test01()
{
    int a = 10;
    return a;
}
int main()
{
    int &inf = test01();
    count << "ref = " <<  inf << endl;
    count << "ref = " <<  inf << endl;
}

输出:ref = 10

           ref = 4324233523

2.引用作为函数返回值可作为左值

因为返回的是引用相当于是一个变量的别名,当然可以赋值。

int& test02()
{
    static a = 10;
    return a;
}
void main()
{
    int & inf = test02();
    cout << "inf = " << inf << endl;
    cout << "inf = " << inf << endl;
    test02() = 1000;
    cout << "inf = " << inf << endl;
    cout << "inf = " << inf << endl;

}
输出:
     inf = 10
     inf = 10
     inf = 1000
     inf = 1000

5.引用的本质

本质:引用的本质在C++内部实现是一个指针常量

也印证了引用初始化后不能更改

6.常量引用

对于
int a = 10;
int & inf = a;
合法,且可通过inf修改a的值

若
int & inf = 10;
不合法
const int & inf = 10;
等价于编译器自动进行了 
int temp = 10;
int & inf = temp;
但中间变量temp是未知的
合法,但inf不能进行修改
此时inf为 引用常量
使用场景:
修饰形参,防止误操作修改了原传入值
void  showValue(const int & a)
{
    //a = 10;报错,只可读不可修改
    cout << a << endl;
}
void main()
{
    int a = 10;
    showValue(a);
}
此时在showValue函数内操作a不会修改main中a 的值

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DQ小恐龙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值