繁体   English   中英

任何人都可以解释我如何从函数中返回C中的二维数组?

[英]Can anyone explain me how to return a two dimensonal array in C from a function?

我是C新手,在学习期间我想从函数中返回一个二维数组,以便我可以在我的主程序中使用它。 任何人都可以用例子解释我。 提前致谢。

这取决于它的实施方式。 您可以只使用一维数组,其中您知道每个(行)的长度,下一行在前一个数据之后立即开始。 或者,您可以拥有一个指向数组的指针数组。 但是,额外的开销是您需要取消引用两个指针才能到达一个数据元素。

// 2D array of data, with just one array
char* get_2d_ex1(int rows, int cols) {
    int r, c, idx;
    char* p = malloc(rows*cols);

    for (r=0; r<rows; r++) {
        for (c=0; c<cols; c++) {
            idx = r*cols + c;   // this is key
            p[idx] = c;         // put the col# in its place, for example.
        }
     }
     return p;
}

将函数声明为将指针返回到指针。 如果我们使用int作为例子:

int **samplefunction() {
    int** retval = new int*[100];
    for (int i = 1; i < 100; i++) {
        retval[i] = new int[100];
    }
    // do stuff here to retval[i][j]
    return retval;
}

这是一个如何创建,操作和释放“二维数组”的示例:

#include <stdlib.h>

#define ROWS   5
#define COLS   10

int **create_2d_array(size_t rows, size_t cols)
{
   size_t i;   
   int **array = (int**)malloc(rows * sizeof(int*));
   for (i = 0; i < rows; i++)
      array[i] = (int*)malloc(cols * sizeof(int));

   return array;
}

void free_2d_array(int **array, size_t rows, size_t cols)
{
   size_t i;
   for (i = 0; i < rows; i++)
      free(array[i]);

   free(array);
}

int main(void)
{
   int **array2d = create_2d_array(ROWS, COLS);
   /* ... */
   array2d[3][4] = 5;
   /* ... */
   free_2d_array(array2d, ROWS, COLS);

   return 0;
}

要创建“2d数组”/矩阵,您所要做的就是创建一个行/宽度大小的动态指针数组(在本例中为int* ):

int **array = (int**)malloc(rows * sizeof(int*));

然后,将这些指针中的每一个都指向一个动态的数组,该数组的int大小为列/高度:

array[i] = (int*)malloc(cols * sizeof(int));

请注意, malloc上的演员表不是必需的,这只是我的习惯。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM