指针数组、数组指针、指向数组类型的引用、指向结构体类型的引用、指向指针类型的引用 ... ...

在下面代码和注释中分别介绍:

#include <iostream>

//先定义一个结构体,后面要使用到
struct color
{
	int red;
	int blue;
	int yellow;
};

int main()
{
	//情况1-指针数组:数组里面可以存放4个int*(存放地址)的数组
	int x0 = 18;
	int* pt_1 = &x0;	//pt_1是指针,存放了x0的地址
	int* arr_pt[4] = { pt_1,pt_1,pt_1,pt_1 };//指针数组

	//情况2-数组指针:指向数组的指针:
	int array2[4] = { 1,4,2,5 };
	int(*pt_arr)[4];//指向具有4个元素之数组的指针
	pt_arr = &array2;//不能直接使用数组名array2,数组名array2是数组的首地址, &array2,&array2[0]

	//情况3-指向数组类型的引用:
	int array[4] = { 1,3,4,6 };
	int(&ref_arr)[4] = array;

	//情况4-指向结构体类型的引用:
	color col_1 = { 1,2,3 };
	color& ref_cl = col_1;
	ref_cl.blue = 23;

	//情况5-指向指针类型的引用:
	int x1 = 45;
	int* pt = &x1;
	int*& ref_pt = pt;
	*ref_pt = 19;//*ref_pt等同于*pt

	//情况6-相应类型的指针可以指向相应类型的引用的地址:
	int x4 = 5;
	int& ref_x4 = x4;
	int* pt_ref = &ref_x4;//&ref_x4等价于&x4,因为ref_x4相当于x4的别名

	//报错:下面这种写法是错误的:
	//int x5 = 25;
	//int& ref_x5 = x5;
	//int&* pt_refx5 = &ref_x5;//报错, 不允许使用指向引用的指针

	//报错:不存在引用类型的引用:
	//int x2 = 45;
	//int& ref_x2 = x2;
	//int&& ref_xx2 = ref_x2;//报错,不存在指向引用类型的引用

	//报错:不存在引用类型的数组,即引用数组不存在
	//int& arrRef[4];//报错
	
	return 0;

理解本质,知道怎么用就好,不必太过于纠结。

上一篇:c语言 12-5


下一篇:4个小时我赚了600块