为了账号安全,请及时绑定邮箱和手机立即绑定

C中是否允许负数组索引?

C中是否允许负数组索引?

C C++
茅侃侃 2019-07-12 09:43:04
C中是否允许负数组索引?我只是在读一些代码,发现那个人正在使用arr[-2]对象之前的第二个元素。arr,就像这样:|a|b|c|d|e|f|g|        ^------------ arr[0]          ^---------- arr[1]    ^---------------- arr[-2]这是允许的吗?我知道arr[x]是相同的*(arr + x)..所以arr[-2]是*(arr - 2),这似乎没问题。你认为如何?
查看完整描述

3 回答

?
守着星空守着你

TA贡献1799条经验 获得超8个赞

这是正确的。摘自C99第6.5.2.1/2号编:

下标算子[]的definition是E1[E2]与(*(E1)+(E2)完全相同。

没有魔法。这是1-1等价物。与往常一样,当取消引用指针(*)时,您需要确保指针指向的是有效地址。


查看完整回答
反对 回复 2019-07-12
?
DIEA

TA贡献1820条经验 获得超2个赞

只有在下列情况下才有效arr指向数组中的第二个元素或后一个元素的指针。否则,它将无效,因为您将访问数组边界之外的内存。因此,例如,这是错误的:

int arr[10];int x = arr[-2]; // invalid; out of range

但这没什么大不了的:

int arr[10];int* p = &arr[2];int x = p[-2]; // valid:  accesses arr[0]

然而,使用负值下标是不寻常的。


查看完整回答
反对 回复 2019-07-12
  • 3 回答
  • 0 关注
  • 695 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信