我有一个指针,定义如下:
A ***b;
按如下方式访问它会做什么:
A** c = b[-1]
是否因为我们对数组使用负索引而导致访问冲突?或者是类似的合法操作*--b
?
EDIT请注意,负数组索引在 C 和 C++ 中具有不同的支持。因此,this https://stackoverflow.com/questions/3473675/are-negative-array-indexes-allowed-in-c不是骗子。
X[Y]
is 完全相同的 to *(X + Y)
只要其中之一X
and Y
一种是指针类型,另一种是整型。所以b[-1]
是相同的*(b - 1)
,这是一个在格式良好的程序中可能会或可能不会计算的表达式 - 这完全取决于 的初始值b
!例如,以下内容完全没问题:
int q[24];
int * b = q + 13;
b[-1] = 9;
assert(q[12] == 9);
一般来说,是your作为程序员,有责任保证在使用指针执行操作时指针具有允许的值。如果你弄错了,你的程序就会有未定义的行为。例如:
int * c = q; // q as above
c[-1] = 0; // undefined behaviour!
最后,为了强化原来的说法,以下也可以:
std::cout << 2["Good morning"] << 4["Stack"] << 8["Overflow\n"];
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)