C++传引用

目录

引用是什么

引用和指针的区别

引用有啥用

注意事项


引用是什么

        

引用就是取别名

int b=a 是定义一个新的变量,使得其地址处存的值等于a

对b做改变,改变的是b地址处存的值

        

int& c=a 是对a的一个引用,此时c的地址就是a的地址 

对c做改变,就是对a地址处的值做改变

        

1、可以给a无限个引用(取无限个别名)

2、指针也可以引用,只要是可修改的变量都可以引用( int*& p=p1 )

        


引用和指针的区别

        

1、引用必须初始化,应该写做 int& p2=a; 指针可以不初始化,让他指向随机值  

2、指针可以初始化指向空; 引用不能初始化指向空

3、引用一旦初始化引用一个实体后,便不能再引用其他实体; 指针可以随便更改指向  

4、sizeof中:引用算的是引用类型的大小; 指针算的是本身的大小

5、有多级指针,没有多级引用

        

1、引用必须初始化,应该写做 int& p2=a; 指针可以不初始化,让他指向随机值  

2、指针可以初始化指向空; 引用不能初始化指向空

3、引用一旦初始化引用一个实体后,便不能再引用其他实体; 指针可以随便更改指向  

4、sizeof中:引用算的是引用类型的大小; 指针算的是本身的大小

5、有多级指针,没有多级引用

        


引用有啥用

        

1、用 引用传参 相比 传值传参 可以大幅降低传递大数据的时间损耗

2、用引用可以做返回值,返回的是变量的地址(但是要注意创建的局部变量出了作用域后会不会销毁)

        

1、用引用传参可以大幅降低传递大数据的时间损耗

2、用引用可以做返回值(但是要注意创建的局部变量出了作用域后会不会销毁)

        


注意事项

        

float a=3.14;
int& p1=a;        //会报错
const int& p2=a;  //不会报错

这是为什么呢?

这里涉及到C语言中的隐式类型转换

引用有个特点:引用初始化化时,不能放大初始化目标的权限(目标具有不可被修改属性,那么就必须要用const修饰过后的引用来引用目标)

当 float 类型的 a 被p1引用时,因为p1是int&类型的,所以a会隐式类型转换为int。

但是,当发生类型转换时,会产生一个临时变量(具有常属性),而本来要进行的p1=a,就变成了p1=‘常量C’,所以就会报错。

所以当我们在前面加上const就可以通过编译

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值