【发布时间】:2012-08-07 23:29:53
【问题描述】:
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 次:
错误:下标值既不是数组也不是指针也不是向量
为什么?据我所知,它们是一回事。
我的编译器是 gcc 版本 4.6.3。
【问题讨论】:
-
你必须说
p[i * n +j]等等。你只有一个一维数组。 -
无关:您的索引算法错误,
*(p+i*n+j)=*(a+i*n+j)+*(b+i*n+j);应使用m而不是n。 -
数组和指针绝对不是一回事。阅读comp.lang.c FAQ 的第 6 节。
-
请注意,错误消息中的“向量”可能指的是gcc extension,而不是C++向量。
-
@KeithThompson 很高兴知道。