ssn*_*ssn 2 c++ arrays pointers access-violation
我有一个指针定义如下:
A ***b;
Run Code Online (Sandbox Code Playgroud)
按如下方式访问它:
A** c = b[-1]
Run Code Online (Sandbox Code Playgroud)
它是否是访问冲突,因为我们对数组使用负索引?或者它是一个类似的合法操作*--b?
编辑请注意,负数组索引在C和C++中具有不同的支持.因此,这不是一个骗局.
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);
Run Code Online (Sandbox Code Playgroud)
通常,作为程序员,您有责任在使用它们执行操作时保证指针具有允许的值.如果你弄错了,你的程序有不确定的行为.例如:
int * c = q; // q as above
c[-1] = 0; // undefined behaviour!
Run Code Online (Sandbox Code Playgroud)
最后,为了加强原始陈述,以下情况也是如此:
std::cout << 2["Good morning"] << 4["Stack"] << 8["Overflow\n"];
Run Code Online (Sandbox Code Playgroud)