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

标签 c arrays

我刚刚读了一些代码,发现这个人正在使用 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/

相关文章:

c - 骰子实验,增加最大 throw 次数

python - 将底层结构公开为 Python 扩展中自定义类型的成员

javascript - for 循环和索引数组不起作用

python - 将 numpy 索引应用于矩阵

c++ - 运算符 '=' 不匹配(std::array<T, 3> 和 std::initializer_list<T>)

c - 使用指针代替数组

c - c中的十进制到二进制

c - 关于为什么我的程序返回错误答案的任何解决方案?

c++ - 如何创建 std::array 包装器类

c++ - OpenMP 上并行合并排序的数组大小问题。如何在更多任务上划分合并排序?