回覆列表
  • 1 # 使用者32959808900

    要理解多維陣列的資料型別,我們知道陣列變數和指標是等價的,那麼多維陣列實際上也是個指標,按陣列的結合規則,它其實是指向陣列元素的指標,

    相當於:也就是將一個長度為20個int的陣列定義為一個新的型別,然後建立一個每個元素是這種陣列的新陣列,這個就是二維陣列。這個作為元素的子陣列一般也叫做行,那麼二維陣列是行的陣列。也可以寫出相應的指標:注意這個括號,它影響型別解析時候,變數與指標和陣列結合的順序。如果沒有這個括號,會優先結合陣列,變成指標的陣列。這類二維陣列或指標第一級解指標會得到一個數組,陣列等效於指向陣列元素的指標,第二級解指標得到陣列元素。在你的陣列元素也是指標的情況下,自然還可以做第三級解指標。你的第二行成立其實是偶然的,因為你取的地址剛好是連續的,這六個變數本身的地址分佈剛好和一個二維陣列一一對應,所以a的地址加2個int長度剛好是c。舉個例子,我們看看這個表示式:pr的型別是指標的二維陣列,相當於指向行的指標,指向的型別是int *[20]。那麼*(pr+1)的型別就是int *[20],偏移了1,實際指向了pr[1],它與&pr[1][0]相同。由於指向的仍然是個陣列,仍然可以當作指標來進行操作,所以再次取指標操作,實際上取了陣列的第一個元素,也就是說這二者是等效的。pr[1][0]在你的程式裡是&d,碰巧你的d、e、f的地址是連續的,d往後偏移一個int就是e,往後偏移兩個int是f,把&d當作一個數組來處理的話,(&d)[2]也就是*(&d + 2),剛好就是f。注意雖然我們前面說陣列在大多數時候相當於指標,能通用的情況很多,但陣列型別和指標型別還是有一些區別的,比如說sizeof()操作的結果,一個是陣列長度 * 元素大小,另一個是指標的大小;比如說構成陣列的時候,陣列的陣列(也就是二維陣列)每個元素的大小是整個陣列的大小,而指標的陣列每個元素是個指標。在取指標操作上兩者幾乎沒有區別。

  • 中秋節和大豐收的關聯?
  • “消逝”與“消失”有什麼區別嗎?