考虑以下代码:
int A[5] = {0,1,2,3,4};
int i=1;
int test = A[i];
Run Code Online (Sandbox Code Playgroud)
此代码生成的 MIPS 程序集将向左移动i 2 位以乘以 4,因为我们获取的是 int(4 字节)。我完全理解这一点。
现在如果我们设置
int i = -1; //or any negative number
Run Code Online (Sandbox Code Playgroud)
生产的组件实际上是相同的。但是在这里,我们将一个负数移动了 2 位,这实际上可以返回一个正数。所以,我的问题是, A[negative_number] 不会用这个负数来抵消地址,但它会产生一个有点随机的结果,对吧?