Re: [問題] 2D array的address

看板C_and_CPP作者 (「雄辯是銀,沉默是金」)時間6年前 (2018/04/24 17:06), 6年前編輯推噓4(6216)
留言24則, 9人參與, 6年前最新討論串4/5 (看更多)
int B[2][3]; B 型別可以把他想成 int (*)[3] ##### 這段有點錯誤, 不要看這段 B 是一個指標, 所以 B + 0 代表一個位址 (400), B + 1 一樣代表一個位址。 B + 0 可以寫成 B[0], 所以 B[0] 就是表示一個位址, 而不是陣列的元素 2。 ##### B[0] 等於 *(B+0) 等於 *B, 所以這 2 個是一樣的東西。 *B 就有點難解釋, int A[2], A 的型別可以想成 int*, *B 可以想成是 int*, 是代表一個指標。 ※ 引述《zzss2003 (brotherD)》之銘言: : 圖片: https://imgur.com/a/8Q7d3GH : 在這個影集當中,我不懂為什麼*B or B[0]是400,不是應該是2嗎? : &B[0][0]是400我能理解,但沒辦法理解*B與B[0],影片中也沒提到為什麼 : 自己用了GCC,compile後也是同樣結果 : 能請前輩們提供一下線索嗎?_? : 謝謝 -- 若要人前顯貴, 就要人後受罪。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 61.218.53.138 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1524560767.A.B05.html

04/24 17:29, 6年前 , 1F
B的型別應該是int (*)[2][3]吧?
04/24 17:29, 1F

04/24 17:30, 6年前 , 2F
打錯了,是int [2][3]
04/24 17:30, 2F

04/24 17:47, 6年前 , 3F
和我舉例的 A[2] 是類似的意思
04/24 17:47, 3F

04/24 18:18, 6年前 , 4F
B + 0 應該是 &B[0], 只是在這東西也是陣列之下位址會相同
04/24 18:18, 4F

04/24 19:37, 6年前 , 5F
B的型別就是 int[2][3] 而不是 int*[3]
04/24 19:37, 5F

04/24 19:39, 6年前 , 6F
enonrick的文章已經教過簡單的判別法
04/24 19:39, 6F

04/24 19:40, 6年前 , 7F
sizeof(B) sizeof(B[0]) sizeof(B[0][0])
04/24 19:40, 7F

04/24 19:44, 6年前 , 8F
看到連續這幾篇文章 C現在來看真的是設計不良
04/24 19:44, 8F

04/24 19:49, 6年前 , 9F
連型別都搞錯不要亂發文害人rrrrrrrrrrrr
04/24 19:49, 9F

04/25 00:14, 6年前 , 10F
不是有 right-left rule 嗎?
04/25 00:14, 10F

04/25 00:14, 6年前 , 11F
為什麼每次都要講得好像很複雜一樣
04/25 00:14, 11F

04/25 01:32, 6年前 , 12F
隱式轉換之後才變成變成指標,陣列的型態是"陣列"
04/25 01:32, 12F

04/25 01:35, 6年前 , 13F
兩者之間比較容易是別的地方是指針不帶長度資訊
04/25 01:35, 13F

04/25 01:35, 6年前 , 14F
04/25 01:35, 14F

04/25 01:36, 6年前 , 15F
識別 ((痾怎麼還有
04/25 01:36, 15F

04/25 09:48, 6年前 , 16F
陣列就是陣列,不要用指標來誤導人謝謝
04/25 09:48, 16F

04/25 09:49, 6年前 , 17F
B就是int [2][3],沒有別的了
04/25 09:49, 17F
做了一些修改。 ※ 編輯: descent (61.218.53.138), 04/25/2018 11:09:36

04/25 13:11, 6年前 , 18F
我想原PO誤把語意當型別, 也就是 K&R C語言 5.7 多維陣列
04/25 13:11, 18F

04/25 13:11, 6年前 , 19F
後半節, 或是 C99 C11 6.5.2.1 Array subscripting 第3點
04/25 13:11, 19F

04/25 13:12, 6年前 , 20F
(該節Semantics第二段落) 的描述.
04/25 13:12, 20F

04/25 13:16, 6年前 , 21F
對初學者來說, 也許講清楚語意更有助理解.
04/25 13:16, 21F

04/26 15:44, 6年前 , 22F
B應該是int [2][3]沒錯, 不過有一些吊詭的點
04/26 15:44, 22F

04/26 15:44, 6年前 , 23F
1. 你不能寫 int C[2][3]; C = B;
04/26 15:44, 23F

04/26 15:45, 6年前 , 24F
2. void f(int B[2][3]) {...} 那在f裡B會變成int(*)[3]
04/26 15:45, 24F
文章代碼(AID): #1QtlD_i5 (C_and_CPP)
文章代碼(AID): #1QtlD_i5 (C_and_CPP)