C++入门引用符&详解

Posted 正在起飞的蜗牛

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++入门引用符&详解相关的知识,希望对你有一定的参考价值。

1、C++的&引用符介绍

(1)&符号在C语言中表示取地址运算;
(2)C++对&符号进行拓展,&符号新增了引用的用法;
(3)声明引用时,必须同时对其进行初始化;
(4)引用声明完毕后,相当于目标变量有两个名称,引用名就相当于变量的别名,操作引号名就相当于操作变量本身;

2、引用和指针的对比

(1)指针在C和C++中都有,且使用方法和实现本质完全相同;但是引用只有C++才有;
(2)引用的定义和识别的关键符号是&,注意和指针取地址的含义进行区分;
(3)引用可以理解成功能弱化、安全性增、受限的指针;
(4)引用型变量在定义时必须初始化,而指针变量可以不初始化;
(5)引用型变量初始化后就不能再修改,而指针变量可以;
(6)引用主要用在函数传参和返回值;

3、&引用符实战

3.1、示例代码

#include <iostream>

using namespace std;

//C语言用指针实现两个int型数的交换
void swap1(int *pa, int *pb)

	int tmp;
	tmp = *pa;
	*pa = *pb;
	*pb = tmp;
	


//C++用引用符&实现两个int型数的交换
//传入的是变量名的引用名,操作引用名就相当于操作变量本身
void swap2(int &ra, int &rb)

	int tmp;
	tmp = ra;
	ra = rb;
	rb = tmp;
	


int main()

	int a = 1, b = 2;
	int c = 3, d = 4;
	
	//传入变量的指针
	swap1(&a, &b);
	
	//直接传变量名,相当于是传的引用名
	swap2(c, d);
	
	
	cout<< "a=" << a <<";"<< "b=" << b << endl;	
	cout<<"c=" << c <<";"<< "d=" << d << endl;	
	
	return 0;

3.2、代码分析

//程序输出结果
[root#]$ a=2;b=1
[root#]$ c=4;d=3

(1)上面的代码用指针和引用两种方式,实现了交换两个int型变量数值的函数;
(2)重点关注&符号在指针和引用两种方式是如何使用的;

4、引用的本质分析

4.1、用const修饰引用

int a;
const int &b = a;

//下面的代码在编译的时候会报错
//因为用const去修饰引用就表示引用是只读的,不能修改
void swap2(const int &ra, const int &rb)

	int tmp;
	tmp = ra;
	ra = rb;
	rb = tmp;
	


//报错信息
In function ‘void swap2(const int&, const int&):
error: assignment of read-only reference ‘ra’
error: assignment of read-only reference ‘rb’

(1)b是变量a的引用名,const修饰后,无法通过b来修改a;
(2)const修饰引用主要是用在函数传参中,当传入的引用只需要读而不需要改时,就可以用const去修饰引用,防止函数中误操作去进行修改,这个C语言的函数用const去修饰传参的思路是一样的;

4.2、引用和sizeof运算符

4.2.1、示例代码

#include <iostream>

using namespace std;

int main()

	int a = 1;
	char b;
	long long c;
	
	int &ra = a;
	char &rb = b;
	long long &rc = c;
	cout << "sizeof(ra)=" << sizeof(ra)<<endl;
	cout << "sizeof(rb)=" << sizeof(rb)<<endl;
	cout << "sizeof(rc)=" << sizeof(rc)<<endl;
	
	return 0;

4.2.2、结果分析

[root#]$ ./a.out 
sizeof(ra)=4
sizeof(rb)=1
sizeof(rc)=8

(1)sizeof得到的不是引用本身的大小,而是引用指向的目标变量的大小;
(2)可以这样理解,引用名就是一个别名而已,本身没有大小,对引用名做sizeof操作,就是对引用指向的变量做sizeof操作;
(3)sizeof操作体现了指针和引用的区别,对指针变量做sizeof操作,得到的确定的字节,4字节(32位操作系统)或者8字节(64位操作系统);

4.3、引用的本质是const指针

(1)int &b = a; 类似于 int * const b = &a;
(2)C++标准并没有规定引用是否占用内存空间,但是大多数编译器都把引用实现为const指针,所以大部分编译器中引用也是要占内存空间的;
(3)引用是天然const的,所以定义时必须初始化指向变量,否则就没意义了;
(4)引用本质是指针,是地址,所以才能实现传址调用的效果;
总结:功能上来说,引用是受限制的指针,相当于用const修饰的指针变量类型;

5、推荐

我会在C++专栏持续根据更新C++相关的知识点,这里也给大家推荐一款学习C++的神器,我也是在用这一款神器在学习C++。
链接:学习神器跳转
如果你是想入门C++这门语言或者是找C++岗位的工作,都推荐你试试这个网站,里面有针对C++知识点的选择题、编程题,更有C++岗位的面试题

以上是关于C++入门引用符&详解的主要内容,如果未能解决你的问题,请参考以下文章

C++之引用&的详解

c++之引用(五千字长文详解!)

C++引用详解

C++引用详解

C++入门篇引用&&内联函数&&auto&&范围for&&nullptr

C++之引用的详解