引用

一、概念

引用:不是一个新定义的变量,而是一个已经定义好的变量的别名

格式:类型 &引用变量名=已定义过的变量名

特点:

    (1)一个变量可以有多个别名

    (2)引用必须初始化(引用必须是其他变量的别名)

    (3)引用只能在初始化的时候引用一次,不能改变为其他变量的引用

二、const引用(常引用)



三、引用做参数

1、【值传递】如果形参为非引用的传值方式,则生成局部临时变量接收实参的值

void Swap1(int x, int y)
{
	int tmp = x;
	x = y;
	y = tmp;
}

不会交换两个变量的值

原因:函数内部的值确实已经交换,但不会影响外面的值


2、【引用传递】如果形参为引用类型,则形参是实参的别名

void Swap2(int &x, int &y)
{
	int tmp = x;
	x = y;
	y = tmp;
}

3、【指针传递】

void Swap3(int* x, int* y)
{
	int tmp = *x;
	*x = *y;
	*y = tmp;
}

4、当不希望改变函数内部改变参数x的值,尽量使用const引用传递

void read(const int & x)
{
	//...
}

四、引用做返回值

1、【传值返回】

int Add(int x, int y)
{
	return x + y;
}

2、【传引用返回】

int &Add(int x, int y)
{
	int ret= x + y;
	return ret;
}

3、利用汇编看传值返回和传引用返回


结论:

1、不要返回一个临时变量的引用

2、如果返回对象出了当前函数的作用域依旧存在,最好使用传引用返回(因为传引用高效)

五、引用和指针的区别和联系

1、引用只能在定义时初始化,之后不能改变指向其它变量(从一而终);指针变量的值可以改变

2、引用必须指向有效的变量;指针可以为空

3、sizeof引用得到的是所指向的变量的大小;sizeof指针是对象地址的大小

sizeof(char*)

    在32位平台上为4

    在64位平台上看编译器配置创建工程时决定是4还是8

4、指针和引用自增(++)自减(--)意义不一样

    引用自增自减改变变量的内容

    指针自增自减改变指针指向

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

6、相对而言,引用比指针更安全(指针比引用更灵活)

7、注意野指针的问题


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值