Re: [問題] 2D array的address

看板C_and_CPP作者 (神崎・H・アリア)時間7年前 (2018/04/23 12:50), 7年前編輯推噓1(106)
留言7則, 2人參與, 7年前最新討論串2/5 (看更多)
《21世紀C語言》書中提供一個直觀的看法。以解析原理來看推薦*偏右。 int a = 2; int *b = &a; int c[3]; int d[2][3][4]; 結果 a 和 *b 是 int ,同樣的邏輯 c[1] 和 d[1][2][3] 是 int 因為歷史包袱,取值的方法有一堆手段,千萬不要寫成以下任何一行的糟糕程式碼: int AAA = *c; int BBB = *(int*)(void*)d; int CCC = b[0]; -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.36.65.143 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1524459040.A.88C.html

04/23 19:54, 7年前 , 1F
b[0] ← 這樣用很糟糕是因為a不是陣列的關係?
04/23 19:54, 1F
對 可能造成後面的人接著寫出b[1]而產生錯誤 比*c後果更糟糕 clean code的觀念就是好的程式碼會讓後面的程式碼保持整潔 髒的程式碼會引出更多髒的程式碼 軟體工程普遍認為越多髒程式碼錯誤率越高 ※ 編輯: KanzakiHAria (114.36.67.138), 04/23/2018 21:43:51

04/24 00:04, 7年前 , 2F
這樣做動態陣列不就頗麻煩的
04/24 00:04, 2F

04/24 02:55, 7年前 , 3F
這是在 int *b = &a; 之下的建議, 動態陣列是不一樣的東西
04/24 02:55, 3F

04/24 02:55, 7年前 , 4F
這其實正是「指標不等於陣列」的真意:
04/24 02:55, 4F

04/24 02:55, 7年前 , 5F
它底下是什麼東西就要用什麼介面去存取
04/24 02:55, 5F

04/24 02:56, 7年前 , 6F
當 b 是指向一個變數時用 * 存取, 指向陣列開頭時才用 []
04/24 02:56, 6F

04/24 10:20, 7年前 , 7F
原來是在說這個啊,感謝
04/24 10:20, 7F
文章代碼(AID): #1QtMOWYC (C_and_CPP)
文章代碼(AID): #1QtMOWYC (C_and_CPP)