2 引用
2.1 基本使用
引用的作用:为变量起一个别名
int a = 10;
int &b = a;
2.2 引用注意事项
- 引用上来就必须初始化
- 一旦初始化后就不能更改
2.3 引用做函数参数及3中传递方式的区别
调用函数,传递参数的方式:
-
值传递(形参不可以修饰实参)
-
传地址
-
传引用:简化指针传递
void swap01(int a, int b)
{
// Pass value
int temp = b;
b = a;
a = temp;
}
void swap02(int *a, int *b)
{
// Pass Address
int tem = *b;
*b = *a;
*a = tem;
}
void swap03(int &a, int &b)
{
// Pass Reference
int temp = b;
b = a;
a = temp;
}
当引用作为形参时,就是给传入的数起一个新的名字,并将改名字指向传入的数字的地址
2.4 引用做函数的返回值
- 不要返回局部变量的引用
- 函数的调用可以作为左值
int& test01()
{
int a = 10;
return a;
}
int& test02()
{
static int a = 10;
// 静态变量存放在全局区,全局区的数据程序结束后系统释放
return a;
}
int main()
{
// int &ref = test01();
// cout<<ref<<endl;
// cout<<ref<<endl;
int &ref = test02();
cout<<ref<<endl;
test02() = 20;
cout<<ref<<endl;
return 0;
}
2.5 引用的本质
本质:引用的本质在C++内部实现是一个指针常量
指针常量:指针的指向不可以修改 ( 但是其内容可以修改,一旦初始化指向不能发生改变 )
常量指针:指针的指向可以修改 ( 指针指向的值不能修改 )
int a = 10;
int &ref = a;
ref = 20;
int* const ref = &a;
*ref = 20;
2.6 引用常量
**作用:**常量引用主要用来修饰形参,防止误操作
在函数形参列表中,可以加const修饰形参,防止形参改变实参
加上const后,一旦修改立刻会报错
2.7 常量指针和指针常量
int a
const int *p = &a; // 常量指针
int* const p = &a; // 指针常量
const int * const p = &a;
常量指针特点:指针的指向可以修改,但是指针指向的值不可以修改
指针常量特点:指针的指向不可以改,指针指向的值可以改
const即修饰指针又修饰常量: 指针的指向和值都不可以改变