学到指针和数组,发现个理解不了的逻辑,虽然不影响使用但不知道原理,很是纠结,求大神解脱

int mcai[3][2] = {};
mcai = &mcai[0] = &&mcai[0][0]
**mcai =
*mcai[0] = mcai[0][0]
∵mcai = mcai[0] = &mcai[0][0]
∴mcai=&mcai[0][0]//错_
理解不了的就是为什么mcai和mcai[0]会是同一个地址,一个地址能存两个指针吗?
(就像一个地址存数组那样?
还有就是为什么mcai指向mcai[0]后,明明同样的地址,mcai[0]会指向mcai[0][0]而不是指回mcai;
感觉是同一个问题,实在理解不了求解救

C语言规定,数组名、数组的第一个元素、数组指针这三者是相等的。
或者说,数组名表示数组的开始地址,而数组第一个元素表示数组第一个元素开始的地址,而数组第一个元素就是数组所在存储的开头,所以相等

(:з)∠)不好意思,我昨天卡了以为问题没发出去,发了三遍还是刷新没显示就放弃了இ௰இ导致同一个问题提了三次இ௰இ对不起