Are negative array indexes allowed in C?
arrays, c
Solution
That is correct. From C99 §6.5.2.1/2:
The definition of the subscript operator [] is that E1[E2] is identical to (*((E1)+(E2))).
There's no magic. It's a 1-1 equivalence. As always when dereferencing a pointer (*), you need to be sure it's pointing to a valid address.
Problem
I was just reading some code and found that the person was using `arr[-2]` to access the 2nd element before the `arr`, like so: ``` |a|b|c|d|e|f|g| ^------------ arr[0] ^---------- arr[1] ^---------------- arr[-2] ``` Is that allowed? I know that `arr[x]` is the same as `*(arr + x)`. So `arr[-2]` is `*(arr - 2)`, which seems OK. What do you think?