一、什么是引用
在C++中,引入引用就是为了避免指针在使用过程中可能出现的问题(空指针,不合法内存),提高程序的安全性。
引用是一种关系型声明的类型,说明它跟别的变量的关系,它所声明的变量不占内存空间,通俗来讲,是已有变量的别名,来说明跟已有变量的关系,所以引用变量的类型要跟已有变量的类型保持一致。
引用引入分析:
二、引用的基本语法和注意事项
语法:type* --- 代表指针
type & ---> 引用类型 比如: int& ,char&
int --- int*(指针类型跟指向的类型保持一致)
在声明引用变量时,一定要说明跟其他变量的关系(必须初始化)
int i;
int& ri = i; //说明ri是i的别名,ri是引用类型声明变量
#include <iostream>
using namespace std;
int main()
{
int a = 10,b=20; //普通变量
int& ra = a; //右值是一个变量名 --- 初始化,一经初始化,不可更改
cout << &a = << &a<<endl;//&a = 0x61feb8
cout << &ra = << &ra<<endl;// &ra = 0x61feb8 说明他们两个都代表着同一块内存
cout << ra = << ra << endl;//10 使用ra就相当于使用变量a
ra = 100;
cout << a = << a << endl;//100
int& raa = ra; //使用引用变量来初始化引用变量,这样结果就是使得普通变量多一个别名而已
cout << raa = << raa << endl;//100
raa = 1000;
cout << a = << a << endl;//1000
cout << ra = << ra << endl;//1000
cout << raa = << raa << endl;//1000
ra = b;//引用变量ra相当于把变量b的值,拿过来给a --- 赋值操作
cout << a << endl;//20
//指针意义 --- 在于可以间接访问内存
int* p = &a;
*p = 200; //*在赋值符号的左边,相当于写内存,在赋值符号的右边,相当于读内存
cout << a = << a << endl;
cout << ra = << ra << endl;
cout << raa = << raa << endl;
int& pa = a;
return 0;
}
引用是一种类型(type&),该类型的作用就是用来声明两个变量之间的关系
引用在声明变量时,必须初始化----它声明的变量 ---被叫作引用变量
总结:
1)引用声明变量时,必须初始化
2)引用变量一经初始化,不可更改
3)一个变量可以被多次引用,每引用一次就多一个别名
4)&符号前有数据类型时为引用 ,其他情况下,为取地址
三、引用的应用
对于引用而言,如果只在一个函数中使用变量,没有必要使用引用,使用基本的数据类型就可以,基本的数据类型除了在函数中可以用来声明变量之外,还可以做函数的形参、函数的返回值。
#include <iostream>
using namespace std;
//编写一个函数,来修改外部变量b的值
//使用指针
void modify_b(int* p)// int* p是在函数内部声明的一个指针变量,要分配内存:4字节
{
if(nullptr == p)
return;
*p = 200;
}
//使用引用
void modify_rb(int& rb) //int& rb = b 节省内存
{
rb = 300;
}
int main()
{
int b = 100;
//int& rb = b; 同一个函数中,使用引用,意义不明显
modify_b(&b); //传递变量的地址 32位占4字节
cout << b <<endl;//200
modify_rb(b); //函数在调用时,编译器int& rb = b只是用来声明rb是b的别名 --- 只是声明,并没有发生地址的拷贝
cout << b <<endl;//300
return 0;
}