关于数组的一个有关问题(C陷阱与缺陷中遇到的有关问题)

关于数组的一个问题(C陷阱与缺陷中遇到的问题)
int calendar[12][31];
int (*p)[31];
若想表示p = calendar[4][7]; 一样的效果;
为什么这样也也可以:
p = *(*(calendar + 4) + 7);
这样 p = *(calendar[4] + 7);我倒是可以理解但是就是上面那个就不清楚了
关键是p = *(*(calendar + 4) + 7);中的*(calendar + 4) + 7怎么理解呀
------解决思路----------------------
指针和数组
http://blog.****.net/zhangxiangdavaid/article/details/38085743


------解决思路----------------------
我的理解是*(calendar + 4) 是第四个数组的地址。*(calendar + 4) + 7是第四个数组第七个元素的地址。
------解决思路----------------------
你完全可以把它理解为一个一维的线性组,这样的就容易理解了。
int calendar[12][31];
int (*p)[31];
若想表示X= calendar[4][7]; 一样的效果;
 calendar[12] <=>*p
*p <=> calendar+0
*(p+4) <=>calendar+4//此为一维数组,里面有12个单元
*(*(p+4)+7) <=>   *(calendar + 4) + 7   //此为第4个单元里的一维数组中的第7个元素(每个单元共有31个元素)

------解决思路----------------------
arr[i] 相当于 *( arr + i )

calendar[4][7] 相当于 *( calendar[4] + 7 )
*( calendar[4] + 7 ) 相当于 *( *(calendar + 4) + 7 )
------解决思路----------------------
引用:
我的理解是*(calendar + 4) 是第四个数组的地址。*(calendar + 4) + 7是第四个数组第七个元素的地址。


谁说的啊,内存是连续排放的,说白了就是一维的。二维只是人为加上去的概念,实际使用的时候得用乘法来表示第二维度
------解决思路----------------------
calendar[4]  不就是 *(calendar + 4) 
------解决思路----------------------
a[i] == *(a + i)
a[i][j] == *(*(a + i) +j)