首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >返回C中的二维数组数组

返回C中的二维数组数组
EN

Stack Overflow用户
提问于 2011-07-20 16:47:20
回答 2查看 513关注 0票数 2

首先,我承认这是家庭作业,但自从我最后一次用C编写程序到现在已经六年了,而且我一直只使用Python和Java编程。

我想要为2D数组生成后续的2D数组,例如:

代码语言:javascript
复制
[1][2][3] 
[4][5][6] 
[7][8][ ]

对于上面的2D数组,后续的2D数组是:

代码语言:javascript
复制
[1][2][3]
[4][5][6]
[7][ ][8] 

代码语言:javascript
复制
[1][2][3]
[4][5][ ]
[7][8][6]

如果我只是将代码放在main()方法中,就不会有问题了。

但是,我想分离这个部分的代码,并将其封装到一个函数中,并在需要时调用它。换句话说,我希望从函数内部生成两个数组,并同时返回这两个数组。

在C语言中,这不是那么简单,因为我不能创建一个可以传递二维数组的函数。

我有一些想法

  1. 返回一个带有2d数组和下一个变量的结构,它是指向另一个后续2D数组的指针(我想在一个循环中处理所有后续数组)。
  2. 创建一个全局指针,在该指针中我将指向第一个结构,该结构依次指向下一个继承项2d数组等等。

但我不太确定该试哪一种。寻找其他有用的线索。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-07-20 16:52:54

若要返回2D数组的数组,请执行以下操作:

代码语言:javascript
复制
int*** getArrayOf2DArrays(int num_arrays, int rows_per_array, int cols_per_array)
{
    int*** arr = malloc(num_arrays * sizeof(int**));
    // check that arr isn't null

    for(int i = 0; i < num_arrays; i++)
    {
        arr[i] = malloc(rows_per_array * sizeof(int*));
        // again, check result

        for(int j = 0; j < rows_per_array; j++)
        {
            arr[i][j] = malloc(cols_per_array * sizeof(int));
            // yet again, check result

            // NOT necessary, but if you want to initialize the values
            // here, you could. Either use memset or:
            for(int k = 0; k < cols_per_array; k++)
                arr[i][j][k] = 0;
        }
    }

    return arr;
}

然后您可以使用arr[array_number][row][col]访问它。一定要在完成时释放它(类似的过程,只有相反的):

代码语言:javascript
复制
void freeArrayOf2DArrays(int*** arr, int num_arrays, int rows_per_array)
{
    // sanity checks here
    for(int i = 0; i < num_arrays; i++)
    {
        // and here
        for(int j = 0; j < rows_per_array)
            // and here
            free(arr[i][j]);
        free(arr[i]);
    }

    free(arr);
}

当然,您可以使用int***数据类型将这个指针传递给任何函数。

票数 3
EN

Stack Overflow用户

发布于 2011-07-20 17:03:15

一个二维数组只是一个3D数组,所以您可以以与参数/返回值相同的方式传递它们。由于您在二维中有固定的大小,所以只使用int*作为类型,并将其视为3D数组可能要容易得多。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6765471

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档