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);
}
这里我得到错误作为一元&#39; *&#39;的无效类型参数(有&#39; int&#39;)。我实际上试图将max函数返回的值分配为第2行和第k列的数组元素。
答案 0 :(得分:0)
您正在对一颗星指针执行两次解除引用。你试图做的是把它当作一个数组数组,但你传入的是一个衰减到指针的二维数组。 2D数组是单个连续的内存块,可以通过算术进行寻址以计算所需的单元格。对于N×M矩阵,如果你想要元素[w] [x],你可以做arr [N * w + x]。或者使用现代C标准,您可以将函数签名调整为这样并正常访问数组:
int calci(int i, int j, int n, c[i][j])