sizeof看的是类型。a的类型是int[5],所以长度是5个int的长度。p的类型是int (*)[5],是一个指针,所以如果你对p进行sizeof运算的话,结果是一个指针的长度。而*p的类型又是int[5]所以sizeof *p和sizeof a是一样的。
指针不等价于数组(数组参与运算的时候可能被处理成指针,这是题外话),p是指向一个一维数组的指针。 *p=p[0]的确是一个一维数组。
数组a的地址就是a第一个元素的地址,类型不一样而已。
另外sizeof是运算符,不是函数。
指针p是一个指针,他指向的是一个大小的5的int数组
*p 也就是p[0],也就是a
p 也就是&p[0],也就是&a
通过p访问数组的第一个元素是p[0][0],或者(*p)[0]