[英]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.