我有一个指针定义如下:
A ***b;
按如下方式访问它:
A** c = b[-1]
是否存在访问冲突,因为我们对数组使用负索引?或者它是一个类似于*--b
的合法操作?
编辑请注意,负数组索引在C和C ++中具有不同的支持。因此,this不是骗局。
答案 0 :(得分:9)
X[Y]
和*(X + Y)
中的一个是指针类型而另一个具有整数类型, X
与Y
相同。所以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}}