//理解数组指针与指针数组要从定义开始,对于优先级的理解
//对于形如 int* p[4],那么他就是个指针数组。因为先定义数组
//对于形如int (*p)[4],就是个数组指针,因为先定义指针。
#include <iostream>
#include <sys/time.h>
using namespace std;
int main()
{
int arr[4][4] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
int *p[4]; //指针数组,[]优先级高于*。p是一个数组,里面存放了4个指向整型数据的指针
int (*q)[4]; //数组指针,()优先级高,说明q是一个指针,这个指针指向一个大小为4个元素的数组的首地址
for(int i = 0;i<4;i++)
{
for(int j = 0;j<4;j++)
printf("%4d ",arr[i][j]);
printf("\n");
}
printf("\n");
q = arr;
for(int i = 0;i<4;i++)
{
for(int j = 0;j<4;j++)
{
printf("%4d ",*(*(q+i)+j)); //对于数组指针来说,相当于二级指针?
}
printf("\n");
}
printf("\n");
for(int i = 0;i<4;i++)
p[i] = arr[i]; //指针数组,让指针数组里每一个元素对应每一行行开头的地址
for(int i = 0;i<4;i++)
{
for(int j = 0;j<4;j++)
printf("%4d ",*(p[i]+j));
printf("\n");
}
printf("\n");
}