[問題] 用陣列方式表達指標的習慣?

看板C_and_CPP作者 (sppmg)時間6年前 (2017/10/17 09:35), 6年前編輯推噓7(708)
留言15則, 7人參與, 6年前最新討論串1/1
開發平台(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

10/17 10:25, 6年前 , 1F
感覺不是效能瓶頸 lol
10/17 10:25, 1F

10/17 10:28, 6年前 , 2F
關鍵應該是 i 的值是否具備某些特性可以利用,根本問題是 p
10/17 10:28, 2F

10/17 10:28, 6年前 , 3F
值可變有沒好處
10/17 10:28, 3F

10/17 10:42, 6年前 , 4F
程式寫給人看的,只要你在使用時可以讓其他人看懂
10/17 10:42, 4F

10/17 10:42, 6年前 , 5F
你用的是指標還是陣列就好,我會習慣用 ()
10/17 10:42, 5F
補充一下。因為最近練習自製 list ,於是出現了這種東西: a->b->c->d[i] 比較: *(a->b->c->d + i) 我知道這只是習慣問題,但還是想知道大家是如何用的。 像上面這種一長串的,如果是習慣用 *() 的人會改用 [] 嗎? 還是堅持一致語法而用 *() 呢?

10/17 11:13, 6年前 , 6F
不要故意寫成i[p]就好
10/17 11:13, 6F
※ 編輯: sppmg (36.231.178.18), 10/17/2017 11:24:34

10/17 13:15, 6年前 , 7F
我會用 *()
10/17 13:15, 7F

10/17 14:01, 6年前 , 8F
除了map用不用operator[]有點差異以外 其他都是爽就好
10/17 14:01, 8F

10/17 14:27, 6年前 , 9F
沒差吧 別鑽牛角尖了
10/17 14:27, 9F

10/17 18:20, 6年前 , 10F
程式除了能動,可讀性也要顧慮到
10/17 18:20, 10F

10/17 18:22, 6年前 , 11F
github專案都會避免一些特殊語法,效能說真的差異不大
10/17 18:22, 11F

10/17 18:23, 6年前 , 12F
相對於網路延遲,mem copy的時間小到可以忽略
10/17 18:23, 12F

10/17 18:24, 6年前 , 13F
除非你是寫driver
10/17 18:24, 13F

10/17 18:28, 6年前 , 14F
我會推薦 a->b->c->d[i] 一眼就知道在幹麻
10/17 18:28, 14F

10/17 19:24, 6年前 , 15F
選我 *(p++)
10/17 19:24, 15F
看來考慮當下的可讀性比較重要。 謝謝各位的解答。 ※ 編輯: sppmg (36.231.178.18), 10/18/2017 11:20:11
文章代碼(AID): #1PvLvOMK (C_and_CPP)