指针数组
本质上是数组,让我们来看一下它是如何定义的
int a,b;
int* p[2]={&a,&b};
如图定义了一个名为p的数组,有两个指针类型的元素,每个指针是int*类型的,也可以放入数组名,因为数组名本质上就是一个指针变量,*是解引用操作,*p可以通过p内存储的地址,找到这个地址对应的值,大概可以看成 int* arr=arr[0] ,所以*arr得到的值就是arr[0]里的值
数组指针
本质上是指针
int arr[]={1,2,3}
int (*p)[10]=&arr;
因为【】的优先级要高于*,所以要加括号来保证这是个指针变量,而p保存了一个一维数组的地址
数组指针可以用于二维数组的表示,
int a[][]={{1,2}{3,4}};
int(*p)=a
由于本质上二维数组是由多个一维数组组成的,所以它的数组名就代表首元素的地址,二维数组的首元素是一个第一个一维数组,a就相当于一个一维数组的地址
*(*(p+i)+j)就可以找到一个二维数组的所有元素