欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ ——> 引用

程序员文章站 2024-01-03 10:20:34
...

本文是对引用的理解

(这只是在下的粗浅理解,不足的地方还请谅解,欢迎留言提出,后期理解深入后会加以改进C++ ——> 引用

引用:引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个别名。
定义的格式为:
类型&引用变量名 = 已定义过的变量名

C++ ——> 引用

从上图就可以很清楚的看出来,引用所建立的这个别名,没有开辟新的内存空间,它的原变量是同一个地址,也就是说,改变引用是可以改变原变量的值,这和指针有相似的地方

C++ ——> 引用

如上图改变引用和改变指针都改变了原变量。

引用的特点:
1. 一个变量可取多个别名 

2. 引用必须初始化 

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

4.声明一个引用,不是定义一个新的变量,只是目标变量的一个别名,它本身不是一种数据类型,因此引用本身

   不占存储单元,系统也不会给引用分配存储单元

5.不能建立数组的引用,因为数组是由多个数据元素组成的 ,所以无法建立一个数组的引用

6.不能建立引用的引用,不能建立指向引用的指针,但可以建立指针的引用,因为引用不是一种数据类型

引用的用法:

const引用

void TestReference2() {
	int d1 = 4;  
	const int & d2 = d1;   
	d1 = 5;          // d1改变 d2的值也会改变。   
	//d2 = 6;   // 不能给常量(不能被修改的量)赋值

	const int d3 = 1;  
	const int & d4 = d3;    
	//int&d5 = d3;    
	const int & d6 = 5;  // 常量具有常性,只有常引用可以引用常量

	double d7 = 1.1;   
	//int& d8 = d7; //d7是double类型,d8是int,d7赋值给 d8时要生成一个临时变量           
	// 也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。   
	const int& d9 = d7; 
}

引用作参数

引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈,可以提高程序的效率。但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。

C++ ——> 引用

可以看出引用和指针的作用一样,都完成了值得交换,因为引用是变量的一个别名,所以对引用操作是直接对原变量直接操作,而且采用值传递时,就会产生形参,并且需要分配存储空间,所以引用比一般的变量传递参数的效率和空间都要好。

引用作返回值

要以引用返回函数值,则函数定义时要按以下格式:
类型标识符 &函数名(形参列表及类型说明)

引用作返回值时需要注意几点:

1.不能返回局部变量的引用,因为局部变量在函数返回后就被销毁了,而被返回的引用就成为了“无所指”的引 用,程序会进出未知状态

2.不能返回函数内部new分配的内存的引用,虽然不存在局部变量的被销毁问题,但是会产生其他的情况,例如

被函数返回的引用是作为一个临时变量的出现,而没有被赋予一个世纪的变量,那么这个引用所指向的空间就无 法释放,从而会造成内存泄漏

C++ ——> 引用

如果返回对象出了当前函数的作用域依旧存在,则最好使用引用返回,因为这样更高效。

引用与指针的区别和联系

1、引用只能在定义时初始化一次,之后不能改变指向别的变量,而指针变量的值可变

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

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

4、引用比指针更安全,而指针比引用更灵活,也更危险



相关标签: 引用

上一篇:

下一篇: