二.C++中的引用

本文详细介绍了C++中的引用,包括引用的基本使用、注意事项、本质、作为函数参数和返回值的情况,以及常量引用的应用。引用作为参数传递时提高了效率,作为返回值允许直接修改调用时的对象。同时强调了引用必须初始化且不能更改,以及不应返回局部变量引用的危险性。
摘要由CSDN通过智能技术生成


前言

本文记录本渣渣依据黑马程序员C++课程视频学习C++笔记

本节记录C++中的引用

2.引用

2.1.引用的基本使用

  • 作用:给变量起别名
  • 语法:数据类型 &别名 = 原名

使用引用后,别名将具备原数据的一般属性
简易代码演示:

#include <iostream>

using namespace std;

int main() {
	int Reference_variable = 10;			//变量原名 = Reference_variable,原值 = 10
	int& ref = Reference_variable;			//引用
	cout << "输出原值    " << Reference_variable << endl;
	cout << "使用引用输出" << ref << endl;	//2者输出相同
	ref += 1;								//修改引用的变量值
	cout << "输出修改后值" << Reference_variable << endl;		//修改引用的变量值,即修改原值
	cout << "使用引用输出" << ref << endl;	//2者输出相同
	cout << "输出原变量地址" << int(&Reference_variable) << endl;
	cout << "输出引用地址  " << int(&ref) << endl;	//可以观察到2者地址相同
	system("pause");
	return 0;
}

运行结果:

引用基本使用


2.2.引用的注意事项

  • 引用必须初始化,不存在空引用,引用必须连接到一块合法的内存。

引用必须初始化

  • 引用在初始化后不可更改。

此处所说修改,是修改引用的值,引用的变量值是可修改的

引用修改


2.3.引用的本质

引用的本质:引用在C++内部实现时一个指针常量

int &ref = a;  //将转换为	int* const ref = &a;
ref = 20//将转换为	*ref = 20;

这也是为何引用必须初始化,且初始化后不可改变
图示
引用本质报错信息

在这里插入图片描述在这里插入图片描述

C++推荐使用引用技术,引用的语法更清楚简单,可读性高


2.4.引用做函数参数

  • 作用:
    使用引用传递函数的参数,在内存中并没有产生实参的副本,它是直接对实参操作;而使用一般变量传递函数的参数,当发生函数调用时,需要给形参分配存储单元,形参变量是实参变量的 副本;如果传递的是对象,还将调用拷贝构造函数。因此,当参数传递的数据较大时,用引用比 用一般变量传递参数的效率和所占空间都好。
  • 通过引用传参产生的效果同地址传递是一样的,引用的语法更清楚简单,可读性高
  • 使用:
    数据类型 函数名(数据类类& 形参名){函数主体}

简单代码演示:

#include <iostream>

using namespace std;

void coutValue(int& ref) {

	cout << "引用地址:  " << int(&ref) << endl;
	cout << "引用作函数参数输出值:" << ref<< endl;

}

int main() {
	int Reference_variable = 10;	//变量 Reference_variable
	cout << "原变量地址:" << int(&Reference_variable) << endl;
	coutValue(Reference_variable);	//函数调用
	
	system("pause");
	return 0;
}

输出结果:
引用作函数参数


2.5.引用做函数返回值

引用是可以作为函数的返回值存在的,可以返回一些特定的值或类对象

  • 引用作函数返回值,可以返回一些特殊值
#include <iostream>

using namespace std;

ostream& Func(ostream &cout ) {
	
	return cout;
}

int main() {
	
	int value = 20;
	
	Func(cout) << value << endl;	//引用作函数返回值,返回特殊值

	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
ostream 为标准输出流库

  • 不应返回函数局部变量引用
#include <iostream>

using namespace std;

int& Func() {
	
	int temp = 10;
	return temp;

}

int main() {
	
	cout << Func() << endl; //引用作函数返回值

	int& value = Func();	
	cout << value << endl;	//如果第一次值未变,说明此地址所指内存尚为被改变
	cout << value << endl;	//不应返回局部变量引用 
	
	system("pause");
	return 0;
}

运行结果:
在这里插入图片描述
如果第一次值未变
说明此地址所指内存尚为被其他数据覆盖或编译器做了保留
我们不应返回局部变量引用,这是危险操作

  • 引用做函数返回值时,函数调用可作左值
#include <iostream>

using namespace std;

int& Func() {
	
	int temp = 10;
	return temp;

}

int main() {
	
	int value = 20;
	cout << "引用作函数左值:" <<(Func() = value) << endl;	//引用作函数返回值时,可以作左值
	
	system("pause");
	return 0;
}

运行结果:
引用作函数左值


2.6.常量引用

可以在定义引用时,加上const 修饰,防止引用的变量值改变

  • 引用声明时加上const后,变为常量引用
  • 作用:常量引用主要用在函数形参,防止函数中误操作,修改实参值

图示:
常量引用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值