相关疑难解决方法(0)

C中是否允许使用负数组索引?

我只是读了一些代码,发现这个人arr[-2]用来访问之前的第二个元素arr,如下所示:

|a|b|c|d|e|f|g|
       ^------------ arr[0]
         ^---------- arr[1]
   ^---------------- arr[-2]
Run Code Online (Sandbox Code Playgroud)

这是允许的吗?

我知道那arr[x]是一样的*(arr + x).所以arr[-2]就是*(arr - 2),这似乎确定.你怎么看?

c arrays

104
推荐指数
5
解决办法
7万
查看次数

运算符[]的负指数是否定义明确?

我知道编码风格会很糟糕,但是下面的代码在我的机器上运行得很好.但这种行为是否定义明确?便携式?

int main()
{
    int *p = new int[3];
    int *q = &p[2];
    q[-1] = 41;
    std::cout << p[1];
    delete[] p;
}
Run Code Online (Sandbox Code Playgroud)

c++ operator-overloading language-lawyer

40
推荐指数
3
解决办法
2480
查看次数

A[-1] 是否真的从 A[0] 返回内存中的前一个位置?

考虑以下代码:

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] 不会用这个负数来抵消地址,但它会产生一个有点随机的结果,对吧?

c assembly mips

1
推荐指数
1
解决办法
96
查看次数

标签 统计

c ×2

arrays ×1

assembly ×1

c++ ×1

language-lawyer ×1

mips ×1

operator-overloading ×1