C语言指针问题 为什么P和*P的值一样

include

#include"malloc.h"
int main(void)
{
// int i;
int a[4][4]={2,1,7,88,99};

int (*p)[4];
p = a;

printf("%d\n", p);
    printf("%d", *p);

}
P和*P值一样

因为数组的地址也是数组第一个元素的地址。p是数组的地址,*p是数组第一个元素的地址。

p=a,表示整个数组的首地址;*p

表示第一行的首地址,这个也是数组的首地址

因为它们都代表数组的首地址

p=a 相当于p=&a[0][4],结果是2;

int *p[4]相当于p[0]代表一个int型指针,p[1]代表一个int型指针,*p的值为2