我想用C语言编写一个函数,它将2维数组返回给我的main函数。
答案 0 :(得分:4)
为int
类型返回动态分配的二维数组的函数。
int ** myfunc(size_t width, size_t height)
{
return malloc(width * height * sizeof(int));
}
一旦不再使用,必须使用free
删除。
EDIT 这只为数组分配了 space ,可以通过指针算法进行访问,但遗憾的是,array[x][y]
之类的索引运算符不能。
如果你想要这样的东西here是一个很好的解释。归结为这样的事情:
int ** myfunc(size_t ncolumns, size_t nrows)
{
int **array;
array = malloc(nrows * sizeof(int *));
for(i = 0; i < nrows; i++)
{
array[i] = malloc(ncolumns * sizeof(int));
}
}
答案 1 :(得分:4)
您不只需返回malloc( x * y * sizeof(type) );
当您尝试将数组索引为二维数组时,这将产生分段错误。
int **a = malloc(10 * 10 * sizeof(int));
a[1][0] = 123;
a[0][1] = 321;
以上结果:Segmentation fault
您需要首先使用c/malloc()
创建一个指针数组,然后迭代此指针数组并为每个指针分配宽度空间。
void *calloc2d(size_t x, size_t y, size_t elem_size) {
void **p = calloc(y, sizeof(void*));
if(!p) return NULL;
for(int i = 0; i < y; i++) {
p[i] = calloc(x, elem_size);
if(!p[i]) {
free2d(y, p);
return NULL;
}
}
return (void*)p;
}
免费
void free2d(size_t y, void *matrix) {
if(!matrix) return;
void **m = matrix;
for(int i = 0; i < y; i++) {
if(m[i]) free(m[i]);
}
free(m);
return;
}
答案 2 :(得分:1)
我猜应该很简单......
char **functioName(char param[][20])
{
char[][20] temp = malloc(20 * 20 * sizeof char);
//processing
return temp
}
答案 3 :(得分:1)
如果你知道数组的大小,你可以这样做:
int (*myfunc())[10] {
int (*ret)[10]=malloc(10*10*sizeof(int));
return ret;
}
此函数返回指向10个10个整数数组的指针。
当然,您应该按原样使用它,并且在使用后不要忘记释放它。