在下面代码和注释中分别介绍:
#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;
理解本质,知道怎么用就好,不必太过于纠结。