负数组索引

时间:2014-05-20 22:26:35

标签: c++ arrays pointers access-violation

我有一个指针定义如下:

A ***b;

按如下方式访问它:

A** c = b[-1]

是否存在访问冲突,因为我们对数组使用负索引?或者它是一个类似于*--b的合法操作?


编辑请注意,负数组索引在C和C ++中具有不同的支持。因此,this不是骗局。

1 个答案:

答案 0 :(得分:9)

只要X[Y]*(X + Y)中的一个是指针类型而另一个具有整数类型,

XY 相同。所以b[-1]*(b - 1)相同,b是一个表达式,可以在格式良好的程序中进行评估,也可以不进行评估 - 这一切都取决于int q[24]; int * b = q + 13; b[-1] = 9; assert(q[12] == 9); 的初始值!例如,以下内容非常好:

int * c = q;   // q as above
c[-1] = 0;     // undefined behaviour!

通常,作为程序员, 负责保证指针在执行操作时具有允许的值。如果你弄错了,你的程序有不确定的行为。例如:

std::cout << 2["Good morning"] << 4["Stack"] << 8["Overflow\n"];

最后,为了加强原始陈述,以下情况也很好:

{{1}}