指针中 *p, p, (*p)[4] 的字节数的变化为什么是这样子的?

#include<stdio.h>
int main()
{
    int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
    int (*p)[4],i,j;
    p=a;
    printf("%d  %d\n",sizeof(int),sizeof(*p));                          
    scanf("%d,%d",&i,&j);                                                      
    printf("a[%d,%d]=%d\n",i,j,*(*(p+i)+j));
    return 0;
}

//为什么sizeof((*p)[4])的字节数为4
//而sizeof(p)的字节数为8? sizeof(*p)的字节数为16