为什么会出现这个wrong variable的错误呢?

Why does this wrong variable error occur?

我无法编译我的程序,因为我一直收到错误消息:

mine.c:40:44: error: subscripted value is neither array nor pointer nor vector
             diamTable[r][c] = diam[r][c] +

相关代码为:

int getMax(int *diam, int m, int n) {
    ...
    for(int c=n-1; c>=0; c--) {
        for (int r=0; r<m; r++) {
            ...
            // Where the error occurs
            diamTable[r][c] = diam[r][c] +
                              max(right, max(rightup, rightdown));
        }
    }

// Driver Code
int main(int argc, char* v[]) {
    ...
    printf("%d\n", getMax(&diam[m][n], m, n));

    return 0;
}

我希望有人知道为什么我会收到上述错误以及如何解决这个问题。

函数getMax的参数diam声明为

int *diam

因此您只能对变量应用一个下标运算符。例如

diam[r]

在这种情况下,表达式的类型是标量类型 int。因此,您可能不会为 int 类型的对象应用第二个下标运算符。

另一方面在这次通话中

getMax(&diam[m][n], m, n)

您正在传递一个指向数组之外的内存的指针 diam 即您正在传递数组中不存在的元素 diam[n][m] 的地址。

要将 diam 用作二维数组,您需要将函数声明为

int getMax( int m, int n, int diam[m][n] ) 

并称其为

getMax( m, n, diam )

在这种情况下,函数内的参数 diam 将具有 int ( * )[n] 类型,您可以对指针应用两个下标运算符。