指向函数

时间:2015-11-07 17:37:06

标签: c pointers function-pointers

我知道它非常基本,但我必须理解这个概念,为什么它不起作用?

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中完成什么?

1 个答案:

答案 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,具体取决于您的体系结构。