c++ 引用

2023-12-13 20:13:20

引用的基本语法

引用就是起别名

#include<iostream>
using namespace std;
int main(){
	//引用基本语法
	//数据类型 &别名 = 原名
	int a = 10;
	int &b =a;
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	b = 100;
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
}

注意:1、引用必须初始化

? ? ? ? ? ?2、引用在初始化后,不可以改变

#include<iostream>
using namespace std;
int main(){
	int a = 10;
	//1、引用必须初始化
	//2、引用在初始化后,不可以改变
	//int &b;//错误,必须要初始化
	int &b = a;
	//2、引用在初始化后,不可以改变
	int c = 20;
	b = c;
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	cout<<"c = "<<c<<endl;
	return 0;
}

引用做函数参数(使用效果与地址一样但是实现效果更简单)

#include<iostream>
using namespace std;
//交换函数
//1、值传递
void myswap01(int a,int b){
	int temp = a;
	a = b;
	b = temp;
	//cout<<"swap01 a = "<<a<<endl;
	//cout<<"swap01 b = "<<b<<endl;
}
//2、地址传递
void myswap02(int * a,int * b){
	int temp = *a;//注意temp前面不需要*
	*a = *b;
	*b = temp;
}
//3、引用传递
void myswap03(int &a,int &b){
	int temp = a;
	a = b;
	b = temp;
}
int main(){

	int a = 10;
	int b = 20;
	myswap01(a,b);//值传递,形参不会修饰实参
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	myswap02(&a,&b);//地址传递,形参会修饰实参的
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	myswap03(a,b);//引用传递,形参会修饰实参的
	cout<<"a = "<<a<<endl;
	cout<<"b = "<<b<<endl;
	return 0;
}

引用做函数返回值

? ? 1、不要返回局部变量的引用

#include<iostream>
using namespace std;
//引用做函数的返回值
//1、不要返回局部变量的引用
int& test01(){
	int a = 10;//局部变量存放在四区中的栈区
	return a;
}
int main(){
	int &ref = test01();
	cout<<"ref = "<<ref<<endl;//第一次结果正确,是因为编译器做了保留
	cout<<"ref = "<<ref<<endl;//第一次结果错误,因为a的内存已经释放
}

? ?2、函数的调用可以作为左值

#include<iostream>
using namespace std;
//引用做函数的返回值
//2、函数的调用可以作为左值
int& test02(){
	static int a = 10;//静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
	return a;
}
int main(){
	int &ref2 = test02();
	cout<<"ref2 = "<<ref2<<endl;
	cout<<"ref2 = "<<ref2<<endl;
	test02() = 1000;//如果函数的返回值是引用,这个函数调用可以作为左值
	cout<<"ref2 = "<<ref2<<endl;
	cout<<"ref2 = "<<ref2<<endl;
}

引用的本质是指针常量(会用即可)

int &ref = a;//相当于int * const ref = &a;

常量引用

#include<iostream>
using namespace std;
int main(){
	//常量引用
	//使用场景:用来修饰形参,防止误操作
	//int a = 10;
	//加上const之后 编译器将代码修改 int temp = 10;const int &ref = temp;
	//不能用int & ref = 10;
	const int & ref = 10;//引用必须引一块合法的内存空间
	//ref =20;//加入const之后变为只读,不可以修改
	cout<<ref<<endl;
	return 0;
}
#include<iostream>
using namespace std;
//打印数据函数
void showvalue(const int &val){
	//val = 1000;没添加const会导致误操作,加上后值不能再修改
	cout<<"val = "<<val<<endl;
}
int main(){
	int a = 100;
	showvalue(a);
	cout<<"a = "<<a<<endl;
	return 0;
}

文章来源:https://blog.csdn.net/m0_62615587/article/details/134897052
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。