在C语言中,如何从一个函数返回一个用于另一个函数的三维整数数组?

在C语言中,如何从一个函数返回一个用于另一个函数的三维整数数组?,c,arrays,function,return,C,Arrays,Function,Return,我使用此函数将任何矩阵拆分为更小的维度矩阵,它将用于另一个函数,该函数将通过使用for循环(循环)继续对“container”数组进行计算 我需要知道如何正确返回“container”数组,以便在另一个函数(而不是主函数)中使用,同时考虑到此函数中的参数来自另一个函数。 因此,该函数将从另一个函数接收一个数组,然后将其拆分并打包成一个3D数组,然后返回该数组以用于函数中的参数 int split_matrix(int matrix[][COL3]){ int row2, col2, row3,

我使用此函数将任何矩阵拆分为更小的维度矩阵,它将用于另一个函数,该函数将通过使用for循环(循环)继续对“container”数组进行计算 我需要知道如何正确返回“container”数组,以便在另一个函数(而不是主函数)中使用,同时考虑到此函数中的参数来自另一个函数。 因此,该函数将从另一个函数接收一个数组,然后将其拆分并打包成一个3D数组,然后返回该数组以用于函数中的参数

int split_matrix(int matrix[][COL3]){
int row2, col2, row3, col3, row1, col1 , row , col , x , unwanted_col;
int container[COL3][COL3-1][COL3-1];
for (x =0, unwanted_col = 0 ; x < COL3 ; x++ , unwanted_col++){
    for (row2 = 0 , row3=0; row3 < COL3 ; row3++ ){
         for (col2=0, col3 =0; col3 < COL3; col3++){
             if (row3!=0 && col3 !=unwanted_col){
                container[x][row2][col2]= matrix[row3][col3] ;
                     col2++;
                          if (col2 == (COL3-1)){row2++;}
              }
          }
       }
}
return ?? ;}

如何进行正确的返回以及如何在第二个函数中使用它?

假设您要返回
容器,目前没有可能的方法,因为它是函数内部的局部变量,一旦函数返回,它将超出范围

基本上只有两种可能的解决方案:对数组的所有级别使用动态分配,并返回一个指针(指向指向指针的指针),但请注意,作为一个数组并不被视为一种补充)

另一种解决方案是在调用函数中声明数组的数组,并在参数中将其传递给函数,然后函数可以使用它。这是我推荐的解决方案,然后函数原型看起来像

void function_name(int matrix[][COL3], int (*container)[COL3-1][COL3-1]);

假设您希望返回
容器
,目前没有可能的方法,因为它是函数内部的局部变量,一旦函数返回,它将超出范围

基本上只有两种可能的解决方案:对数组的所有级别使用动态分配,并返回一个指针(指向指向指针的指针),但请注意,作为一个数组并不被视为一种补充)

另一种解决方案是在调用函数中声明数组的数组,并在参数中将其传递给函数,然后函数可以使用它。这是我推荐的解决方案,然后函数原型看起来像

void function_name(int matrix[][COL3], int (*container)[COL3-1][COL3-1]);

以下是符合要求的答案: 通过创建指针的动态数组来创建3D数组。 这将允许在函数外部使用数组。 使用malloc()分配动态内存。 最后,释放3D阵列以再次使用

int COL;  //global variable that will be assigned a value by the user's input
void split_matrix (int *matrix[COL]);

int main ()
{
    scanf ("%d", &COL);
    //code goes here to receive the matrix from the user
    split_matrix (the_matrix);
    return 0;
}

void split_matrix (int *matrix[COL])
{
    int x, y;
    int ***container;
    container = malloc (COL * sizeof (int **));
    for (x = 0; x < (COL); x++) {
        container[x] = malloc ((COL - 1) * sizeof (int *));
        for (y = 0; y < (COL - 1); y++) {
            container[x][y] = malloc ((COL - 1) * sizeof (int));
        }
    }
    //code goes here to split the parameter matrix(2D array)

    for (x = 0; x < (COL); x++) {
        for (y = 0; y < (COL - 1); y++) {
            free (container[x][y]);
        }
        free (container[x]);
    }
    free (container);


}
int列//将由用户输入指定值的全局变量
无效分割矩阵(int*矩阵[COL]);
int main()
{
scanf(“%d”列和列);
//代码在这里接收来自用户的矩阵
分裂矩阵(分裂矩阵);
返回0;
}
无效分割矩阵(整数*矩阵[COL])
{
int x,y;
集装箱;
容器=malloc(COL*sizeof(int**));
对于(x=0;x<(列);x++){
容器[x]=malloc((COL-1)*sizeof(int*);
对于(y=0;y<(列-1);y++){
容器[x][y]=malloc((COL-1)*sizeof(int));
}
}
//此代码用于拆分参数矩阵(2D数组)
对于(x=0;x<(列);x++){
对于(y=0;y<(列-1);y++){
免费(集装箱[x][y]);
}
免费(集装箱[x]);
}
免费(集装箱);
}

以下是符合要求的答案: 通过创建指针的动态数组来创建3D数组。 这将允许在函数外部使用数组。 使用malloc()分配动态内存。 最后,释放3D阵列以再次使用

int COL;  //global variable that will be assigned a value by the user's input
void split_matrix (int *matrix[COL]);

int main ()
{
    scanf ("%d", &COL);
    //code goes here to receive the matrix from the user
    split_matrix (the_matrix);
    return 0;
}

void split_matrix (int *matrix[COL])
{
    int x, y;
    int ***container;
    container = malloc (COL * sizeof (int **));
    for (x = 0; x < (COL); x++) {
        container[x] = malloc ((COL - 1) * sizeof (int *));
        for (y = 0; y < (COL - 1); y++) {
            container[x][y] = malloc ((COL - 1) * sizeof (int));
        }
    }
    //code goes here to split the parameter matrix(2D array)

    for (x = 0; x < (COL); x++) {
        for (y = 0; y < (COL - 1); y++) {
            free (container[x][y]);
        }
        free (container[x]);
    }
    free (container);


}
int列//将由用户输入指定值的全局变量
无效分割矩阵(int*矩阵[COL]);
int main()
{
scanf(“%d”列和列);
//代码在这里接收来自用户的矩阵
分裂矩阵(分裂矩阵);
返回0;
}
无效分割矩阵(整数*矩阵[COL])
{
int x,y;
集装箱;
容器=malloc(COL*sizeof(int**));
对于(x=0;x<(列);x++){
容器[x]=malloc((COL-1)*sizeof(int*);
对于(y=0;y<(列-1);y++){
容器[x][y]=malloc((COL-1)*sizeof(int));
}
}
//此代码用于拆分参数矩阵(2D数组)
对于(x=0;x<(列);x++){
对于(y=0;y<(列-1);y++){
免费(集装箱[x][y]);
}
免费(集装箱[x]);
}
免费(集装箱);
}

谢谢,我想要的是在第二个函数中使用容器数组,然后循环使用它。@John,那么将它以相同的方式传递给第二个函数?对不起,为了能够传递它,我应该在第一个函数的{return}后面放什么?我想在第二个函数中使用第一个函数,就像这个空函数的名称(int matrix[][COL3]{split_矩阵(matrix);}然后我想使用“split_矩阵(matrix)”值,以便对容器数组中的每个元素进行进一步计算。这正是我要查找的。第二个函数本身我想在主函数中使用它,因此我需要它只接受一个参数。因此,我不能每次在主函数中使用第二个函数时都为其传递另一个参数谢谢,我想要的是在第二个函数中使用容器数组,然后循环使用。@John,那么将其以相同的方式传递给第二个函数?对不起,我应该在第一个函数中的{return}之后放置什么才能传递它?我想在第二个函数中使用第一个函数,就像这个空函数_name(int matrix[][COL3]{split u matrix(matrix);}然后我想使用“分割矩阵(矩阵)”值,以便对容器数组中的每个元素进行进一步计算。这正是我要查找的。第二个函数本身我希望在主函数中使用它,因此我需要它只接受一个参数。因此,在处理数值时,我不能每次在主函数中使用它时,都为第二个函数传递另一个参数数组时,建议初始化所有元素,以防止在OP i