引用 c++

引用 c++,第1张

文章目录
  • 前言
  • 一、使用步骤
    • 1.引用的基本使用
    • 2.引用使用的注意事项
    • 3.引用做函数参数
    • 4.引用可以做函数返回值
    • 5.引用的本质
    • 6.常量引用


前言

所谓引用,就是给变量起个小名,就像父母叫你乳名一样,两个不同的名字对应的是同一个人,对应的是同一份数据


一、使用步骤 1.引用的基本使用

代码如下(示例):

#include
using namespace std;
int main()
{
	int a=100;
	                     //创建引用
	int &b=a;
	cout<<"a= "<<a<<endl;
	cout<<"b= "<<b<<endl;
	b=10;                 //这样修改啊数据是合法的
	cout<<"a= "<<a<<endl;
	cout<<"b= "<<b<<endl;
	return 0;
}
2.引用使用的注意事项
  1.  引用必须初始化,不然会报错
    
  2.  初始化后不能改变,但可以进行赋值 *** 作
    

代码如下(示例):

#include
using namespace std;
int main()
{
	int a=100;
	int b=90;
	//int &c;             错误必须初始化  
	int &c=a;   
	c=b;             //赋值合法 
	c=1000;			//赋值合法 
	cout<<"a= "<<a<<endl;
	cout<<"b= "<<b<<endl;
	cout<<"c= "<<c<<endl;
	return 0;
}

3.引用做函数参数

引用可以让形参修饰实参,达到指针的目的
优点:可以简化指针修改实参
代码如下(示例):

#include
using namespace std;
//值传递
void swap1(int a,int b)
{
	int t=a;
	a=b;
	b=t;
 } 
 //地址传递 
 void swap2(int *a,int *b)
 {
 	int t=*a;
	*a=*b;
	*b=t;
 }
 void swap3(int &a,int &b)
 {
 	int t=a;
	a=b;
	b=t;
 }
int main()
{
	int a=100;
	int b=90;
	cout<<"main  a= "<<a<<endl;
	cout<<"main  b= "<<b<<endl;
	swap1(a,b);
	cout<<"swap1 a= "<<a<<endl;
	cout<<"swap1 b= "<<b<<endl;
	swap2(&a,&b);
	cout<<"swap2 a= "<<a<<endl;
	cout<<"swap2 b= "<<b<<endl;
	swap3(a,b);
	cout<<"swap3 a= "<<a<<endl;
	cout<<"swap3 b= "<<b<<endl;
	return 0;
}

由此可见引用和地址传递一样,可以对数据进行修改,只有值传递不行
swap3输出数据和原数据一样,是因为被反转两次,恢复原状了

4.引用可以做函数返回值

千万千万不要返回局部变量引用,局部变量在栈区,运行后被销毁,引用的东西没了,什么也返回不了
代码如下(示例):

#include
using namespace std;
//返回局部变量引用 
int& test1()
{
	int a=100;
	return a;
}
//返回静态引用 
int& test2()
{
	static int a=100;//加一个 static,把数据放在全局区,在主程序执行完前不会被销毁 
	return a;
}
int main()
{
	int &b=test1();;
	cout<<"b= "<<b<<endl;//和指针一个尿性,编译器会保留一次,然后就被销毁 
	cout<<"b= "<<b<<endl;//所以第二次输出的时候是乱码 
	int & b2=test2();
	cout<<"b2= "<<b2<<endl;//原来使用这种方法解决的,太棒了吧! 
	cout<<"b2= "<<b2<<endl;
	test2()=1000;            //返回引用,函数可以当左值,就是函数可以在左边被赋值 
	cout<<"b2= "<<b2<<endl;
	cout<<"b2= "<<b2<<endl;
	return 0;
}
5.引用的本质

想必你们也看出来了
这跟指针就是一个妈生的!!!!!!!!!!!!!
本质就是c++内部实现的指针常量
代码如下(示例):

#include
using namespace std;
//发现引用,转换为int* const ref_a = &a
void test3(int &ref)
{
	ref = 100;//ref是引用,转化为*ref = 100
}
int main()
{
	
	int a = 10;
	int &ref_a = a;//这一步,系统自动转换为int* const ref_a = &a;.这个地方的&是取址符。

这也说明了引用不许初始化的原因。

ref_a = 20;//系统内部发现ref_a是引用,自动帮助我们转化为*ref_a = 20; cout << " a = " << a << endl; cout << "ref_a = " << ref_a << endl; test3(a); }

6.常量引用

防止数据被修改

#include
using namespace std;
void show(const int& v)
{
	//v=1000;
	cout<<v<<endl;
 } 
int main()
{
	//int &r=10    错误,因为引用需要合法空间
	//加入const 就行了,编译器优化代码 
	const int &r=10;
	//加入const后不能那个进行修改变量 
	int a=10;
	show(a); 
	return 0;	
}

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/674282.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)

保存