引用类型及与指针的比较(C++笔记)

引用是C++在C语言上延伸的一种新的机制,是对C语言中指针的功能的一种新的实现方式。

引用类型
.引用(&)是标识符的别名,即变量的别名。
.在定义一个引用时,必须同时对它初始化,使它指向一个已存在的对象。

int i=10int& ri=i;//定义int引用ri,并初始化为变量i的引用

此时ri相当于变量i的另一个别名,操作ri等效操作i;

int i = 10;
int& ri = i;
ri--;
cout << ri << endl;
cout << i << endl;
//结果是9 9

.引用经初始化后,就不能让其指向其他对象。

与指针的异同
相同:
1、都是地址的概念,指针指向一块内存,内部存储的内容是所指的内存的地址;引用是模块内存的别名。
2、引用和指针,在内存中都是占4个字节的存储空间。因为它们存放的都是所指对象地址。

不同:
1、指针是一个实体,在内存中另外的地址存储,但引用只是变量的别名,它的地址就是所指变量的地址。
2、在使用两者进行操作原对象时,引用使用时无需解引用(*),指针需要解引用;引用比指针使用起来形式上更漂亮,使用引用指向的内容时可以直接用引用变量名,而不像指针一样要使用** ;定义引用的时候也不用像指针一样使用& 取址。
3、引用在初始化后不能让其指向其他对象,但指针可以。

	int i = 10,j=5;
	int& r = i;
	int* l = &i;
	r = j;//可行,但r所指变量依旧是i,这里只是把j的值赋予了i(r);
	&r = j;//报错
	l = &j;//可行,使l指向了j

4、引用没有const,指针有const,被const修饰后的指针无法指向其他对象。(const相关以后讲)
5、引用不能为空,在定义时就需初始化;指针可以为空。
6、对引用和指针使用sizeof的意义是不同的,sizeof(引用)得到的是引用所指对象的对象,但sizeof(指针)得到的是指针本身的大小。

	char c = '0';
	char& rc = c;
	char* lc = &c;
	cout << sizeof(rc)<< endl;
	cout << sizeof(lc) << endl;
	//结果是1 4

7、引用和指针的自增(++)运算意义不一样;
操作引用等同于操作原变量,其实质是原变量的自增运算;
但指针的指针的自增是使指针下移一位。


什么时候使用引用、什么时候使用指针
使用引用参数的主要原因有两个:

程序员能修改调用函数中的数据对象
通过传递引用而不是整个数据–对象,可以提高程序的运行速度
一般的原则:

对于使用引用的值而不做修改的函数:

如果数据对象很小,如内置数据类型或者小型结构,则按照值传递
如果数据对象是数组,则使用指针(唯一的选择),并且指针声明为指向const的指针
如果数据对象是较大的结构,则使用const指针或者引用,已提高程序的效率。这样可以节省结构所需的时间和空间
如果数据对象是类对象,则使用const引用(传递类对象参数的标准方式是按照引用传递)

对于修改函数中数据的函数:

如果数据是内置数据类型,则使用指针
如果数据对象是数组,则只能使用指针
如果数据对象是结构,则使用引用或者指针
如果数据是类对象,则使用引用

作者:HawardScut
来源:CSDN
原文:https://blog.csdn.net/hao5335156/article/details/53893714
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/qq_43530773/article/details/113770351