一、引用传入
声明方法:类型标识符 & 引用变量名 = 被引用的变量名
表层来看引用只是一个别名,底层来看C++中的引用和指针的处理方式相同(在所有用到引用变量的地方系统会自动解引用)
特点:
①必须被初始化
②引用初始化的变量一定要可以取地址
③引用是不可改变的(引用声明完毕后,相当于目标变量名有两个名称,因此不能把该引用名作为其它变量的别名)
④引用只能访问引用所引用变量引用的内存单元
二、const关键字(在C语言和C++中const关键字都是在编译阶段完成)
1、在C语言中 const关键字的作用只有一个,即const修饰的变量不能做左值,称为常变量
2、在C++中,const关键字将其修饰的变量属性置为常量(杜绝间接访问修改常量内存块)
注意:c++中const修饰的是常量,常量是不允许被修改的,因此一定要初始化并且被const修饰的变量不允许普通指针指向
3、const修饰遵循就近原则,数据类型对于const来说是透明的:
const int *p 和 int const *p
三、const和指针的结合
int a = 10;
int *p = &a;
const int **q = &p;
//第三行代码是错误的:const修饰 **q 即直接访问a,a就是一个常量,*p访问a有修改a的风险
//修改如下
int a = 10;
int const *p = &a;//杜绝了通过*p 修改a的风险
const int **q = &p;
/*
int a = 10;
int *p = &a;
const int * const *q = &p;//杜绝了通过 **q 修改a的风险,和 *q 修改 pde风险
*/
四、const和引用的结合
int a = 10;
int &b = a;//正确
//int &c = 10;//错误,10是常量,常量不能被取地址
//修改
const int &c = 10;//加上const关键字后,10这个常量被放进一个临时量中,临时量可以取地址
const和引用结合称为常引用,常饮用可以引用立即数,系统会将立即数放进临时量中,常引用来引用这个临时量
int a = 10;
int *p = &a;
//const int * &q = p;//错误
//修改如下
const int * const& q = p;
//或者
// const int *p = &a;
五、const和形参的结合
1、 形参加上const的作用:
①防止实参被修改
②引用立即数
2、 引用做形参和普通变量做形参的区别:
①引用可以修改实参的值
②引用不能引用立即数,部分实参无法调用
六、const和返回值的结合
int *func()
{
return 1;
}
int main()
{
int irt = *func();
int *prt = func();
int &rrt = *func();
//int * &prrt = func();//等价于 int* &prrt = eax;
//寄存器eax不能取地址
//修改
int *const &prrt = func();
}
int &func()
{
int a = 10;
return a;
}
int main()
{
int irt = func();//函数返回值由eax寄存器带回,eax里放的是&a,引用有自动解引用的功能 则访问到a
int &rrt = func();
int *prrt = &func();
}