一、什么是引用
在C++中,引入引用就是为了避免指针在使用过程中可能出现的问题(空指针,不合法内存),提高程序的安全性。
引用是一种关系型声明的类型,说明它跟别的变量的关系,它所声明的变量不占内存空间,通俗来讲,是已有变量的别名,来说明跟已有变量的关系,所以引用变量的类型要跟已有变量的类型保持一致。
引用引入分析:
二、引用的基本语法和注意事项
语法:type* — 代表指针
type & ---> 引用类型 比如: int& ,char& int --- int*(指针类型跟指向的类型保持一致) 在声明引用变量时,一定要说明跟其他变量的关系(必须初始化) int i; int& ri = i; //说明ri是i的别名,ri是引用类型声明变量
//[1] 引用的基本概念 type& int i = 10; int& ri = i; //必须初始化,要说明跟某个变量的关系 cout << "ri = " << ri << "i = "<< i<< endl;//10 10 cout << "&ri = " << &ri << " "<< "&i = " << &i << endl; //地址相同 ri = 20; cout << "ri = " << ri << "i = "<< i<< endl; //20 20 i = 30; cout << "ri = " << ri << "i = "<< i<< endl; //30 30 //[2] 注意事项 //[2.1] int j = i; //int j = 100; ---> 其他的基本数据类型可以使用常量和变量来初始化 //int & rj = 100; //error 这种方式声明的引用,把它叫作普通引用,普通引用不能使用常量来初始化,内存地址不确定 //[2.2] int &rj = j; //rj就是j的别名,跟j代表着同一块内存空间,引用一经初始化,不可更改 rj = i; //将变量i的值,赋值给rj,并不是初始化,使用类型声明一个变量时给它赋值,才是初始化 //[2.3] int& rrj = rj; //引用可以多次被引用 多次被引用的结果就是一个变量有多个别名 cout << "rrj = " << rrj << "rj = " << rj << "j = " << j << "i = " << i << endl; //[2.4] // &符号前有数据类型时为引用 ,其他情况下,为取地址
三、引用的应用
对于引用而言,如果只在一个函数中使用变量,没有必要使用引用,使用基本的数据类型就可以,基本的数据类型除了在函数中可以用来声明变量之外,还可以做函数的形参、函数的返回值。
1、引用做为函数的形参
引用做为函数的形参,那么该参数采用是址传递
void changeA(int& aa) //引用做为函数形参时,可以不初始化 { aa = 20; } void changeAA(int* p) { if(p != nullptr) { *p = 50; } } void test(int a[]) //int* a { //sizeof(a) = ? } void test1(int a[1000]) //int* a { //sizeof(a) = ? } void test2(int a[5]) { //sizeof(a) = ? } //编译器将以上三个函数都变成 void test2(int *a) void test1(int* a) void test(int *a) //数组做为函数形参时,会自动退化为指针 int main() { //[1] 通过一个函数,来修改外部变量的值 int a = 10; changeA(a); cout << "a = " << a << endl; changeAA(&a); cout << "a = " << a << endl; int b[5]; test(b); test1(b); return 0; }