双指针功能
问题描述:
我知道这是非常基本的,但我必须理解这个概念,为什么它不起作用?双指针功能
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?
答
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,具体取决于您的架构。
您收到的任何错误消息? –
这不是关于函数的双指针,而是关于'int'的双指针(或者指向指针的指针)。此外,类型'int arr [N] [N]'和'int * arr [N]'在C中不是同一个事物。您需要使它们一致,或者至少可以传递int arr [N ] [N]'到'int * arr [N]'而不是相反。 – lurker
为什么它不是一回事?那是我不明白的 –