加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c – 索引与指针

发布时间:2020-12-16 10:37:02 所属栏目:百科 来源:网络整理
导读:我正在使用元素数组,其中许多元素相互引用,我假设在这种情况下使用指针更有效. 但在某些情况下,我需要知道我有指针的元素的索引.例如,我有p = a [i],我需要知道i的值.据我了解,我可以通过p – a计算出来.但是这种操作固有地涉及分割,这是昂贵的,而从数组索引
我正在使用元素数组,其中许多元素相互引用,我假设在这种情况下使用指针更有效.
但在某些情况下,我需要知道我有指针的元素的索引.例如,我有p =& a [i],我需要知道i的值.据我了解,我可以通过p – a计算出来.但是这种操作固有地涉及分割,这是昂贵的,而从数组索引计算地址涉及乘法并且更快.

所以我的问题是,在需要索引的情况下是否使用指针进行交叉引用甚至是值得的?

解决方法

But this operation inherently involves division,which is expensive,whereas computing an address from an array index involves a multiplication and is faster.

仅当元素的大小不是2的幂时,即当它不是指针时,或者在大多数系统上的某种标准类型时,该操作才需要除法.使用比特移位除以2的幂,这是非常便宜的.

computing an address from an array index involves a multiplication and is faster.

这里适用相同的逻辑,除了编译器向左移动而不是向右移位.

is cross referencing with pointers in a case where you need the indexes as well even worth it?

在没有分析的情况下计算CPU周期是过早优化的一个例子 – 在开始设计时要考虑的一件坏事.

更重要的考虑因素是索引更加健壮,因为它们经常在数组重新分配后继续存在.

考虑一个例子:假设有一个数组在向后添加元素时动态增长,该数组的索引和指向该数组的指针.你向数组添加一个元素,耗尽它的容量,所以它现在必须增长.你调用realloc,并获得一个新的数组(如果在“官方”结束后有足够的额外内存,则获得一个旧数组).你持有的指针现在无效;但是,索引仍然有效.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读