作者sppmg (sppmg)
看板C_and_CPP
标题[问题] 用阵列方式表达指标的习惯?
时间Tue Oct 17 09:35:15 2017
开发平台(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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1508204120.A.594.html
※ 编辑: sppmg (36.231.178.18), 10/17/2017 09:35:59
1F:推 steve1012: 感觉不是效能瓶颈 lol 10/17 10:25
2F:推 Feis: 关键应该是 i 的值是否具备某些特性可以利用,根本问题是 p 10/17 10:28
3F:→ Feis: 值可变有没好处 10/17 10:28
4F:→ diabloevagto: 程式写给人看的,只要你在使用时可以让其他人看懂 10/17 10:42
5F:→ diabloevagto: 你用的是指标还是阵列就好,我会习惯用 () 10/17 10:42
补充一下。因为最近练习自制 list ,於是出现了这种东西:
a->b->c->d[i] 比较:
*(a->b->c->d + i)
我知道这只是习惯问题,但还是想知道大家是如何用的。
像上面这种一长串的,如果是习惯用 *() 的人会改用 [] 吗?
还是坚持一致语法而用 *() 呢?
6F:推 loveflames: 不要故意写成i[p]就好 10/17 11:13
※ 编辑: sppmg (36.231.178.18), 10/17/2017 11:24:34
7F:→ diabloevagto: 我会用 *() 10/17 13:15
8F:推 Killercat: 除了map用不用operator[]有点差异以外 其他都是爽就好 10/17 14:01
9F:推 steve1012: 没差吧 别钻牛角尖了 10/17 14:27
10F:→ kingofsdtw: 程式除了能动,可读性也要顾虑到 10/17 18:20
11F:→ kingofsdtw: github专案都会避免一些特殊语法,效能说真的差异不大 10/17 18:22
12F:→ kingofsdtw: 相对於网路延迟,mem copy的时间小到可以忽略 10/17 18:23
13F:→ kingofsdtw: 除非你是写driver 10/17 18:24
14F:推 kingofsdtw: 我会推荐 a->b->c->d[i] 一眼就知道在干麻 10/17 18:28
15F:推 longlongint: 选我 *(p++) 10/17 19:24
看来考虑当下的可读性比较重要。
谢谢各位的解答。
※ 编辑: sppmg (36.231.178.18), 10/18/2017 11:20:11