引用的使用方法c语言,C++引用的使用

C++引用的使用

一、什么是引用

引用是C++在C的基础上新添加的一类数据类型,他的优点是既保留了C语言中指针操作的高效性,又弥补了指针直接操作内存可能带来的安全性问题。

1.1引用的声明方法

数据类型标识符 & 引用变量名 =被引用变量名;

【列1】

int a ;

int & b=a;//定义一个引用变量b引用的的对象是a

说明:

一、&符号在C++中不再仅仅表示取地址,这里的&符号使用做引用变量的标识符的作用

二、声明引用类型变量时必须对其进行初始化,一旦初始化后引用变量与被引用变量间的绑定关系不可被更改,即不允许引用变量再次绑定其他变量。

三、为了保证使用引用的安全性,引用变量不可以被取地址,不同于*指针的方式引用无法进行指针似的偏移从而保证无法通过引用来直接修改内存

四、引用实际上就是给被引用变量起了一个别名,通过操作引用可以实现对被引用变量的读写。

五、不能建立一个数组的引用,因为数组是一个由若干元素构成的集合,所以无法建立一个数组的别名。

1.2为什么C++要加入引用类型的变量,引用类型与指针类型的比较

传统C语言中指针的优缺点

在传统的C语言中我们想要通过函数来修改实参通常是使用指针的传递,让函数直接对内存进行操作,这样做的好处是高效,在传入参数的类型比较大时,比如字符串或数组,指针的传递相比直接的数值传递要快得多。但同样也带来了一个问题,那就是指针可以通过偏移访问不同的内存,一旦偏移量出现问题可能会访问到系统的关键位置,从而带来了安全性的问题。

引用类型与指针类型的比较

引用类型既保留了指针在函数传递参数时的高效性,引用变量又因为不能被访问地址从而不能进行偏移保证了访问地址的绝对安全。

使用时的直接区别

一、指针可以为null,引用变量必须在定义时被初始化

二、引用变量与被引用变量一旦绑定就无法在修改,而指针可以

二、引用变量的实际应用

2.1引用变量作为函数形参声明

函数名(参数数据类型 & 引用形参)

【例】

void swapr(int & a,int & b);

2.2引用类型在函数中的实际使用

引用类型在函数中传递的作用可以等效于*指针的作用,但应用变量不需要额外加上取内容的标识符*,看起来更加的简洁。

【例】

void swapr(int & a,int & b)//实现传入实参值交换

{

int temp = a;//临时变量保存a

a=b;//相比*a=*b的指针方式看起来更直观简洁

b=temp;

return 0;

}

2.3传参数时特殊情况——临时变量

我们在调用函数时,往往传入的不是一个直接的变量名,而是一个值的表达式,如下面这种情况。

int x,y;

swapr(X+3,y+5);

这时由于引用变量只能接受一个变量,故C++设计了一个临时变量用来先保存表达式的值,再将该临时变量交给引用变量引用。值得注意的是临时变量的数据类型是const的,因此在函数的声明与定义中也要进行相应的修改。

void swapr(const int & a,const int & b); //声明与定义都要改为常引用

2.4常引用的作用

2.4.1常引用的声明

const 数据类型 & 引用变量名 = 被引用变量名;

【例】

int b =3;

const int & a = b;//常引用定义

a=1;//错误,不能通过常引用修改被引用变量

b=1;//可以

2.4.2为什么要使用常引用

在介绍临时变量时我们已经知道了一些常引用的作用,除了能接受临时变量外常引用更重要的作用是增强代码的健壮性,如下面这种情况,我们并不需要修改传入参数,而只是想要读取传入变量的值,使用常引用就可以保证被引用变量的安全。

int Square(const int & a)

return a*a;

情况,我们并不需要修改传入参数,而只是想要读取传入变量的值,使用常引用就可以保证被引用变量的安全。

int Square(const int & a)

return a*a;

有些人可能会觉得有点脱裤子放屁的感觉,明明可以直接通过参数传递解决,切形参与实参间没有关系,也不会影响传入的实参。但是这里只是相对简单的变量传入,如果传入的变量是一个非常大的类型,使用参数间传递就需要通过内存的拷贝会产生额外的内存还有一系列的堆栈操作,既浪费时间又浪费空间。而使用常引用的优势就在这里体现了,常引用作为别名有指针传递的特性,传递的只是一个非常小的指针参数大大减少了传递参数的时间,又因为常引用无法取地址进行偏移和无法对被引用变量进行修改,既保证了内存的安全,又保障了被引用变量的安全。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值