gpt4 book ai didi

C下标值既不是数组也不是指针也不是 vector

转载 作者:行者123 更新时间:2023-12-01 13:59:22 24 4
gpt4 key购买 nike

int * matrixsum(int *a,int *b,int n,int m)
{
int *p=NULL,i,j;
p=malloc(sizeof(int)*n*m);
if(p==NULL)
{
printf("Error!\n");
exit(1);
}
for(i=0;i<n;i++)
{
for(j=0;j<m;j++)
{
*(p+i*n+j)=*(a+i*n+j)+*(b+i*n+j);
}
}
return p;
}

我的问题是关于行 *(p+i*n+j)=*(a+i*n+j)+*(b+i*n+j);:如果我用 p[i][j]=a[i][j]+b[i][j]; 替换它,我会收到以下错误 3 次:

error: subscripted value is neither array nor pointer nor vector

为什么?据我所知,它们是同一回事。

我的编译器是 gcc 版本 4.6.3。

最佳答案

它们根本不是一回事——这就是编译器提示的原因!你可以这样写:

p[i*n+j] = a[i*n+j] + b[i*n+j];

p的类型是int *;因此 p[i] 的类型是 int,并且您不能下标 int。您必须传递 int 的二维数组,或指向 int 的指针数组,才能使用 p[i][ j] 符号。例如,在 C99 中(使用可变长度数组——并注意参数的重新排序):

int *matrixsum(int n, int m, int a[m][n], int b[m][n])
{
...
p[i][j] = a[i][j] + b[i][j];
...
}

或者,在设置时非常小心,您可以使用:

int *matrixsum(int **a, int **b, int m, int n)
{
...
p[i][j] = a[i][j] + b[i][j];
...
}

请注意,对于后一个示例,您不能简单地编写:

int a[4][4] = { ... };
int b[4][4] = { ... };
int r = matrixsum(a, b, 4, 4);

二维数组的内存分配与 int ** 符号所需的完全不同。

关于C下标值既不是数组也不是指针也不是 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11855552/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com