我知道它非常基本,但我必须理解这个概念,为什么它不起作用?
void printMat(int arr[N][N], int n)
{
int i, j;
for (i = 0; i < n; i++)
for (j = 0; j < n; j++)
if (i < j)
{
arr[i][j] = 0;
}
{
arr[i][j] = i+j+2;
}
}
int** triDown(int arr[N][N], int n)
{
int i, j, **a;
for(i = 0; i < n; i++)
{
*(a+i) = (int*)malloc(sizeof(int)*(i+1));
}
for(i=0;i<n;i++)
for(j=0;j<i+1;j++)
{
a[i][j] = arr[i][j];
}
return a;
}
void main()
{
int *arr[N],**NewMat;
printMat(arr,N);
NewMat = triDown(arr,N);
}
在功能和动态分配方面,我很难理解指向指针的事情。
应该在NewMat
func中完成什么?
答案 0 :(得分:1)
int a[N][N]
和int *a[N]
永远不兼容。第一个是int
值的二维数组,而第二个是int
指针的一维数组。对于兼容的指针类型,您需要将其声明为int (*a)[N]
。然后,您可以将int a[N][N]
作为参数传递,就像您将int a[N]
传递给int *a
的一维情况一样。
但是你需要在main
中声明实际的数组,而不只是指向它的指针。请注意,int (*a)[N]
只是一个指针值,因此其大小很可能是4或8,具体取决于您的体系结构。