从一个函数到另一个函数传递多维数组

时间:2019-12-26 23:03:32

标签: c function pointers multidimensional-array pass-by-reference

概念:我正在尝试将数组传递给function1,然后再次将其传递给由function1调用的另一个function2。我要做的就是打印该数组。( ):

  

6 5 //行数和列数

     

7 4 5 2 7

     

6 9 1 6 3

     

9 2 7 9 8

     

8 8 1 7 2

     

2 3 1 8 4

     

4 6 5 4 6

所以我的主体看起来像这样:

int main()
{
    int n,m; //number of lines,number of columns
    scanf("%d %d",&n,&m);

    int **array;
    array = malloc(n * sizeof(int *));
    for(int i=0; i<n; i++)
    {
        array[i] = malloc(m * sizeof(int));
    }

    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
            scanf("%d",&array[i][j]);
        }
    }

    function1(n,m,array);

    for(int i=0; i<n; i++)
    {
        free(array[i]);
    }
    free(array);
}

function1看起来像这样:

void function1(int n,int m,int **array)
{
    function2(n,m,&array);
}

然后是function2:

void function2(int n,int m,int ***array)
{
        printf("%d %d\n",n,m);
        for(int i=0; i<n; i++)
        {
            for(int j=0; j<m; j++)
            {
                printf("%d ",*array[i][j]);
            }
            printf("\n");
        }
 }

我在做什么错了,不仅得到了分段错误,而且还打印出了以下内容: 6 5 7 6 9 8 2 分段故障(核心已转储) 它将第一列打印为一行。

1 个答案:

答案 0 :(得分:0)

感谢@Johnny Mopp的评论,因为方括号的优先级高于*我要做的所有事情都是反对* array [i] [j]写(* array)[i] [j]。非常感谢很多评论:)