Re: [問題] 二維陣列的陣列名稱
※ 引述《Nairoda (new)》之銘言:
: 我看書上說
: 如果設 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 變數的值相等, 理由是不是來自於 (問題一) 中, 被定
: 義的情況一樣?
: 自己唸書的懷惑, 請求各位的幫助, 謝謝!
像 a 這個名字除了它的位置(你講的"值")以外 它的型態也很重要
a 它是個"在 0x22cd0c 的 int[2][3]"
a[0] 它是個"在 0x22cd0c 的 int[3]"
a[0][0] 它是個"在 0x22cd0c 的 int"
這種型態的差別決定了 *a 和 *(a[0]) 的解釋結果不同
*a 會是一個"在某處的 int[3]" 而 *(a[0]) 會是一個"在某處的 int"
而某處在哪就是你上面提到的"值"了
也就是
*a 是 "在 0x22cd0c 的 int[3]"
*(a+1) 是 "在 0x22cd18 的 int[3]"
*(a[0]) 是 "在 0x22cd0c 的 int"
這個樣子
b 的情況則不一樣 它是一個 (位置在別的地方) 的指標 其內容為 0x22cd0c
那麼 *b 就只是單純對這個指標內容進行提取而已
只是提取的結果是什麼就又要再看 b 的型態了
這裡的 b 型態是 int(*)[3] 所以提取之後就是一個"在某處的 int[3]"
這邊的某處因為 b 是指標 所以所指的某處就是 b 的值
因此 *b 就是一個 "在 0x22cd0c 的 int[3]"
這樣應該可以讓你了解為何"看起來"(印出來)一樣的東西實際上會有不同解釋
--
所以很多地方才會說"陣列不完全等於指標 只是有時你可以互相換著用"就是如此
--
1989/02/22 優希堂悟 1990/02/22 冬川こころ 1993/07/05 小町つぐみ 1994/05/21 高江
ミュウ 1995/04 歡迎來到 星野遊々 1997/03/24 守野いづみ 1997/03/24 伊野瀬チサト
1998/06/18 守野くるみ 1999/10/19 打越鋼太郎的 楠田ゆに 2000/02/15 樋口遙 2002/
12/17 八神ココ 2011/01/11 HAL18於朱倉岳墜機 2011/04/02 ∞與∫的世界 茜崎空啟動
2012/05/21 第貮日蝕計畫預定 2017/05/01~07 LeMU崩壞事故 2019/04/01~07 某大學合宿
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.112.28.92
推
07/24 11:33, , 1F
07/24 11:33, 1F
→
07/24 11:39, , 2F
07/24 11:39, 2F
→
07/24 13:17, , 3F
07/24 13:17, 3F
討論串 (同標題文章)
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章