Negative array index

筅森魡賤 提交于 2019-12-24 03:49:11

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!