看板 C_and_CPP 關於我們 聯絡資訊
開發平台(Platform): (Ex: Win10, Linux, ...) all 問題(Question): 對於一個指標 p ,具有: p[i] == *(p+i) 剛剛看了「混沌四神:陣列、指標、宣告、定義」 #1ERylPtG (C_and_CPP) 知道陣列 != 指標,語法上的相似是編譯器處理掉的。 (不過以前初學的時候看過書上提過用[]和*處理陣列資料的爭執, 說有人測過指標會略快一點?) 那我想請問通常對於一個 malloc 空間的操作會習慣使用[]還是 *() 呢? 會這樣問是因為感覺上 p[i] 好像比 *(p+i) 來的簡潔。 不過不知道會不會容易造成誤會,像是 p[-1] 這種用法。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.231.178.18 ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1508204120.A.594.html ※ 編輯: sppmg (36.231.178.18), 10/17/2017 09:35:59
steve1012: 感覺不是效能瓶頸 lol 10/17 10:25
Feis: 關鍵應該是 i 的值是否具備某些特性可以利用,根本問題是 p 10/17 10:28
Feis: 值可變有沒好處 10/17 10:28
diabloevagto: 程式寫給人看的,只要你在使用時可以讓其他人看懂 10/17 10:42
diabloevagto: 你用的是指標還是陣列就好,我會習慣用 () 10/17 10:42
補充一下。因為最近練習自製 list ,於是出現了這種東西: a->b->c->d[i] 比較: *(a->b->c->d + i) 我知道這只是習慣問題,但還是想知道大家是如何用的。 像上面這種一長串的,如果是習慣用 *() 的人會改用 [] 嗎? 還是堅持一致語法而用 *() 呢?
loveflames: 不要故意寫成i[p]就好 10/17 11:13
※ 編輯: sppmg (36.231.178.18), 10/17/2017 11:24:34
diabloevagto: 我會用 *() 10/17 13:15
Killercat: 除了map用不用operator[]有點差異以外 其他都是爽就好 10/17 14:01
steve1012: 沒差吧 別鑽牛角尖了 10/17 14:27
kingofsdtw: 程式除了能動,可讀性也要顧慮到 10/17 18:20
kingofsdtw: github專案都會避免一些特殊語法,效能說真的差異不大 10/17 18:22
kingofsdtw: 相對於網路延遲,mem copy的時間小到可以忽略 10/17 18:23
kingofsdtw: 除非你是寫driver 10/17 18:24
kingofsdtw: 我會推薦 a->b->c->d[i] 一眼就知道在幹麻 10/17 18:28
longlongint: 選我 *(p++) 10/17 19:24
看來考慮當下的可讀性比較重要。 謝謝各位的解答。 ※ 編輯: sppmg (36.231.178.18), 10/18/2017 11:20:11