1、引用 reference
1、引用的概念
- 引用就是变量的别名,对引用操作与变量本身操作是完全一样的
- 引用的本质也是通过指针来实现的,但是在使用过程中弱化了内存地址这一概念,因此除了C++以外的面向对象编程语言都保留了引用,哪怕编程语言剔除了指针这一概念
2、创建一个引用
- 创建一个引用的代码
#include<iostream> //标准输入输出流的头文件
using namespace std; //使用std命名空间
int main()
{
int a=100;
//b时a的引用
int& b=a;
//对b进行操作和对a进行操作完全一样
cout<<&a<<" "<<&b<<endl; // 0x61fe88 0x61fe88
cout<<a<<" "<<b<<endl; // 100 100
return 0;
}
- 运行结果
3、引用的性质
1、性质一:可以改变引用变量的值,但是不能再次成为其他变量的引用
1、可以改变引用变量的值
- 代码
#include<iostream>
using namespace std;
int main()
{
int a=100;
int b=200;
//创建引用:c是a的引用
int& c=a;
//改变引用变量的值
c=b; //正确操作,把c和a的值改为200
cout<<"a="<<a<<endl;
cout<<"b="<<b<<endl;
cout<<"c="<<c<<endl;
return 0;
}
- 运行结果
2、已经定义的引用不能再次成为其他变量的引用
- 代码
#include<iostream>
using namespace std;
int main()
{
int a=100;
int b=200;
//创建引用:c是a的引用
int& c=a;
//已经定义的引用不能再次成为其它变量的引用
int& c=b; //错误
&c=b; //错误
return 0;
}
- 运行结果
2、性质二:声明引用时必须同时对其进行初始化
1、错误:声明引用,未进行初始化
- 代码
#include<iostream>
using namespace std;
int main()
{
//(错误)声明一个引用,不进行初始化
int& c; //错误
return 0;
}
- 运行结果
2、正确:声明引用的同时必须进行初始化
- 代码
#include<iostream>
using namespace std;
int main()
{
int a=100;
//声明一个引用,并且进行初始化
int& c=a; //正确
cout<<"a="<<c<<endl;
return 0;
}
- 运行结果
3、性质三:声明引用初始化时,初始化的值不能为NULL
·1、错误:引用初始化为NULL的情况
- 代码
#include<iostream>
using namespace std;
int main()
{
//错误示范:将定义的引用初始化为NULL
int& c=NULL; //错误
return 0;
}
- 运行结果
4、性质四:声明引用时,初始化的值可以是纯数字,但是这种情况下必须声明为常引用,使用const关键字修饰引用,表示引用的值不可变。
- const修饰:只能读,不能写
1、错误:初始化为纯数字,不声明常引用的情况
- 代码
#include<iostream>
using namespace std;
int main()
{
//错误示范:初始化为一个纯数字,但是不声明为常量的情况
int& c=123; //错误
return 0;
}
- 运行结果
2、正确:定义的引用的初始化为纯数字时,必须声明为常引用,使用const关键字修饰引用,表示引用的值不可变。
- 代码
#include<iostream>
using namespace std;
int main()
{
//正确示范:初始化为一个纯数字,引用声明为常量的情况
//int& c=123; //错误
const int& c=123; //正确
cout<<"c="<<c<<endl;
return 0;
}
- 运行结果