二維數組的指針 != 指針的指針
以前一直以爲,二維數組的數組名就是一個指針的指針,直到今天一位同學問我一個相關的問題,我才醒悟。
這段代碼是編譯不通過的,提示“無法從“int (*)[3]”轉換爲“int **”。雖然二維數組可以看成是一個平面結構(如下)
a[0][0] |
a[0][1] |
a[0][2] |
a[1][0] |
a[1][1] |
a[1][2] |
但是實際上,數組的在內存中的存儲依然是線性的,即:
a[0][0] |
a[0][1] |
a[0][2] |
a[1][0] |
a[1][1] |
a[1][2] |
我們很容易就可以看出int **p和int[2][3]的區別,如果僅僅定義int **p,無法知道p[0][0]和p[1][0]之間差多少個元素。所以在傳參的時候,需要傳遞類似 int a[][3]字樣的值,比如: