[問題] 二維陣列的陣列名稱

看板C_and_CPP (C/C++)作者 (new)時間13年前 (2011/07/24 10:20), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/7 (看更多)
我看書上說 如果設 int a[2][3] = {1,2,3,4,5,6} 二維陣列名稱 a 被定義為此陣列的起始記憶體位址。我的解讀是: 這二維陣列的數值在記憶體上被一個連續的記憶體區塊儲存著, 其中第一個位元組的記憶 體序號就是 a, 也就是 a = &a[0][0]。 書上說, a[0] 也可以被看成 (a[0])[3], 是一個一維的陣列, 而 a[0] 是此一維陣列的 陣列名稱, 所以 a[0] 被定義是 (a[0])[3] 的第一個記憶體序號, 所以 a = &a[0][0]。 同理 a[1] 可以被看成 (a[1])[3], 是一個一維的陣列, 而 a[1] 是此一維陣列的陣列名 稱, 所以 a[1] 被定義是 (a[1])[3] 的第一個記憶體序號, 所以 a = &a[1][0]。 事實上, 程式 run 出的結果也是這樣。 main(){ int a[2][3] = {1,2,3,4,5,6}; printf("a = %p\n", a); printf("a[0] = %p\n", a[0]); printf("a[1] = %p\n", a[1]); } 輸出結果: $ ./a.exe a = 0x22cd0c a[0] = 0x22cd0c a[1] = 0x22cd18 我的問題是: *a 輸出的結果是 0x22cd0c *(a+1) 輸出的結果是 0x22cd18 (問題一) a 反參考後 (也就是 *a) 會得到與 a 相同的值, 這完全是因為被定義的結果嗎? 我不可 以把 a 視為是陣列 a[2] 的位址對不對 ? 原因是不是 a[0] 與 a[1] 根本不是個變數 ? (問題二) 如果我要接收 a 這個值的說, 要找一個相容的變數, 於是我設了一個指向 int [3] 的指 標 b: int (*b)[3]; b = a; 這樣是合法 ok 的 但是, b 的反參考是 *b, 也與 b 變數的值相等, 理由是不是來自於 (問題一) 中, 被定 義的情況一樣? 自己唸書的懷惑, 請求各位的幫助, 謝謝! -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 118.233.7.208
文章代碼(AID): #1EAu65xj (C_and_CPP)
文章代碼(AID): #1EAu65xj (C_and_CPP)