【发布时间】:2013-05-15 14:54:48
【问题描述】:
假设我有:
int test[10];
在 32 位机器上。如果我这样做了:
int b = test[-1];
显然,在访问数组(越界)时这是一个很大的禁忌,但实际发生了什么?只是好奇
我是在访问数组“之前”的 32 位字吗?
int b = *(test - 1);
或者只是解决一个非常遥远的单词(从“测试”内存位置开始)?
int b = *(test + 0xFFFFFFFF);
0xFFFFFFFF是十进制-1的二进制补码表示
【问题讨论】:
-
这是未定义的行为。
-
@alex23:这也是 C99 中未定义的行为。您链接到的问题中的答案并不矛盾,这些答案同样适用于 C++。
标签: c++ arrays indexing addressing