我刚刚读了一些代码,发现这个人正在使用 arr[-2]
来访问 arr
之前的第二个元素,就像这样:
|a|b|c|d|e|f|g|
^------------ arr[0]
^---------- arr[1]
^---------------- arr[-2]
这是允许的吗?
我知道 arr[x]
与 *(arr + x)
相同。所以arr[-2]
是*(arr - 2)
,这看起来没问题。你怎么看?
最佳答案
没错。来自 C99 §6.5.2.1/2:
The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).
没有魔法。这是 1-1 的等价关系。与往常一样,在取消引用指针 (*) 时,您需要确保它指向有效地址。
关于c - C中是否允许负数组索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3473675/