C++ 引用

引用的目的:取别名

基本语法:

与原名的类型必须一致

//例子
int a= 10;
int &b = a;

注意事项

这里的&不是求地址运算,而是起标识作用

类型标识符是值目标变量的类型

必须在声明引用变量时进行初始化

引用初始化之后不能改变

不能有NULL引用。必须确保引用是和一块合法的存储单元关联

可以建立对数组的引用

对数组建立引用

直接建立引用

int arr[100];
int(&Arr)[100]=arr;

先定义出数组类型,再通过类型定义引用

typedef int(arr_test)[10]
int arr[100];
arr_test &a1 = arr

函数中的引用

void test(int &a,int &b)
{
a = 1;
b = 2;
}
int main()
{
int a =10;
int b =20;
test(10,20);
}
//这里的传参就相当于int &a = a;

注意事项:

引用必须引用一块合法的内存空间。必须是在内存上的

不要返回局部变量的引用。

引用的本质

引用的本质在C++内部是一个指针常量:

Type& ref = val; // Type* const ref = &val;
//这里的 *const 表示地址是不变的但是内容可以变,参考c语言的const结合

指针的引用

直接对指针的变量进行引用其实和变量的引用是一个道理

int *p =NULL;
int * &p2 = p;//这样指针的引用后p和p2就是同一个东西,通常用在给函数传参数中

void test(int * &p2)
{
p2 = (int*)malloc(sizeof(int));
}
void test01()
{
int p;
test(p);//这样就给p分配了内存了
}

常量的引用

定义格式:

const Type& ref = val;

相当于int temp = val,const int &ref = temp;

通常对于常量的引用来说都是用在形参,并且有const关键字来修饰,目的是防止被修改,防止误操作,但是如果要修改的话还是可以修改。

但是还是相当于是一个内存中的数,所以还是可以通过间接修改来修改的

void test01(const int &a)
{
printf("%d",a);
//如果采用 a = 100;这样修改修改不了,就是为了防止误操作,
//但是采用指针来修改还是可以修改
}
void test()
{
int a = 10;
test01(a);
}