- 前言
- 一、使用步骤
- 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.引用使用的注意事项
-
引用必须初始化,不然会报错
-
初始化后不能改变,但可以进行赋值 *** 作
代码如下(示例):
#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输出数据和原数据一样,是因为被反转两次,恢复原状了
千万千万不要返回局部变量引用,局部变量在栈区,运行后被销毁,引用的东西没了,什么也返回不了
代码如下(示例):
#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;
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)