为什么会出现这个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]
类型,您可以对指针应用两个下标运算符。
我无法编译我的程序,因为我一直收到错误消息:
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]
类型,您可以对指针应用两个下标运算符。