如何在c中从引用中为二维数组赋值?

int max(int x,int y){ if(x>=y) return x; else return y; } int calci(int i,int j,int n,int *c){ int k,y,m; k=j; y = (n)/((2^i)*(2^j)); for(y=i;y>=0;y--){ for(k=j;k>=0;k--){ *(*(c+2)+k) = max(y,calci(i+1,k,n,c)+calci(i+2,k,n,c)+calci(i,k+1,n,c)); } for(y=0;y<=j+2;y++){ *(*(c+1)+y)=*(*(c+2)+y); *(*(c+0)+y)=*(*(c+1)+y); } } return *(*(c+2)+0); } int main(){ int i,j,n,z,x,y; printf("Enter the amount\n"); scanf("%d",&n); x=log(n)/log(2); y=log(n)/log(3); int arr[3][y+3]; for(i=0;i<=2;i++) for(j=0;j<=y;j++) arr[i][j+2]=0; z = calci(x,y,n,arr); printf("\n%d",z); } 

在这里我得到错误作为一元’*’的无效类型参数(有’int’)。 我实际上试图将max函数返回的值赋值为第2行和第k列的数组元素。

您正在对一颗星指针执行两次解除引用。 你试图做的是把它当作一个数组数组,但你传入的是一个衰减到指针的二维数组。 2D数组是单个连续的内存块,可以通过算术进行寻址以计算所需的单元格。 对于N×M矩阵,如果你想要元素[w] [x],你可以做arr [N * w + x]。 或者使用现代C标准,您可以将函数签名调整为像这样并正常访问数组:

 int calci(int i, int j, int n, c[i][j])