问题
I have a pointer which is defined as follows:
A ***b;
What does accessing it as follows do:
A** c = b[-1]
Is it an access violation because we are using a negative index to an array? Or is it a legal operation similar to *--b
?
EDIT Note that negative array indexing has different support in C and C++. Hence, this is not a dupe.
回答1:
X[Y]
is identical to *(X + Y)
as long as one of X
and Y
is of pointer type and the other has integral type. So b[-1]
is the same as *(b - 1)
, which is an expression that may or may not be evaluated in a well-formed program – it all depends on the initial value of b
! For example, the following is perfectly fine:
int q[24];
int * b = q + 13;
b[-1] = 9;
assert(q[12] == 9);
In general, it is your responsibility as a programmer to guarantee that pointers have permissible values when you perform operations with them. If you get it wrong, your program has undefined behaviour. For example:
int * c = q; // q as above
c[-1] = 0; // undefined behaviour!
Finally, just to reinforce the original statement, the following is fine, too:
std::cout << 2["Good morning"] << 4["Stack"] << 8["Overflow\n"];
来源:https://stackoverflow.com/questions/23771001/negative-array-index