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;
}
My question is about the line *(p+i*n+j)=*(a+i*n+j)+*(b+i*n+j);: if I replace it with p[i][j]=a[i][j]+b[i][j]; I get the following error 3 times:
error: subscripted value is neither array nor pointer nor vector
Why? From my knowledge they are the same thing.
My compiler is gcc version 4.6.3.
They’re not the same thing at all — which is why the compiler is complaining! You could write:
The type of
pisint *; therefore the type ofp[i]isint, and you can’t subscript anint. You’d have to be passing a 2D-array ofint, or an array of pointers toint, to be able to use thep[i][j]notation. For example, in C99 (using variable-length arrays — and note the reordering of the parameters):Or, with some considerable care in the setup, you could use:
Note that for this latter example, you can’t simply write:
The memory allocation for the 2D array is quite different from what is required for the
int **notation.