C++引用复习--笔记

C++引用复习–笔记

说明:本文章仅为本人的复习笔记,想找个地方记下笔记,如果有存在问题的地方还请指正,谢谢!

什么是引用

引用即为一个变量起别名,引用不是复制、也不是指针,而是给变量起一个别名,方便参数的传递。引用存在的意义就是克服了值传递和地址传递参数的一些漏洞。
引用的形式为:

// 如 int a = 10; int &b = a;此处b即为a的引用
类型标识符 &引用名 = 目标名;  // 如上,即int &b = a;

为什么说引用克服了值传递和地址传递的漏洞呢?
值传递时,相当于在内存空间中拷贝了一份相同的参数,没有改变变量的实参,且如果要操作的对象较大,那么就需要拷贝一个很大的操作对象,占用内存,增加CPU的工作量。对于指针类型的地址传递,相当于新增了一个指针,用于存放在变量的地址,使用时需要解引用,可读性较差。

引用和指针的区别

引用是起一个别名,而指针则是该存储指向变量的地址。指针需要解引用才是变量本身,对引用进行操作时就是操作变量本身。
下面举个例子:

void main() {
	int a = 10;
	int *b = &a;
	int &c = a;
	cout << b << endl;
	cout << c << endl;
	cout << *b << endl;
	system("pause");     
}

上面输出分别为:005BF79C,10,10
指针为变量的地址,引用即为本身,对指针解引用才为变量的值。
另外:1、指针可以是空指针,但不存在空引用;2、指针可以改变,随时指向别的向量,引用一旦初始化,就不能改变;

引用注意事项

1、引用在定义时就必须初始化;
2、引用只能绑定左值,而不能绑定常量;
3、引用一旦初始化,就不能作为别的变量的引用;
4、数组无法使用引用,因为数组是一个集合。

引用例子

例子1:
下面展示一些 内联代码片

nt &j = i;// j是一个引用类型做参数,代表i的替代名,i值改变时,j值也跟着改变。
#include<iostream.h>
Void main(){
Int i = 5;
Int &j=i;
i =7;
Cout<<”i=<<i<<”j=<<j;

最终输出都为都为7
例子2
下面展示一些 内联代码片

#include<iostream.h>
Void Swap(float &m,flaot &n){
float temp;
temp = m;
m = n;
n =temp;
}
Void main(){
flaot a,b;
cin>>a>>b;
Swap(a,b);
cout<<a<<endl<<b<<endl;
}

此处引用类型作参数。a和m使用同一处内存空间,b和n使用同一空间,即交换后实参也改变。
作以下三点说明:
(1)传递引用给函数与传递指针的效果是一样的,形参变化实参也发生变化;
(2)引用类型作形参,在内存中并没有产生实参的副本,它直接对实参操作;而一般变量作参数,形参与实参就占用不同的存储单元,所以形参变量的值是实参变量的副本。因此,当参数传递的数据量较大时,用引用比用一般变量传递参数的时间和空间、效率都好。
(3)指针参数虽然也能达到与使用引用的效果,但在被调函数中需要重复使用“*指针变量名”的形式进行运算,这很容易产生错误且程序的阅读性较差;另一方面,在主调函数的调用点处,必须用变量的地址作为实参。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值