我正在寻找一种有效的方法来创建二维数组并返回它,通常我会创建一个指针数组,为每个指针分配内存,然后返回一个 **ptr。我正在寻找另一种方法来做到这一点,因为那样我必须释放分配的每一个内存。
我在网上读到,您可以像这样分配一个二维数组:int (*arr)[n] = malloc( sizeof *arr * i );
其中ptr是一个指针,指向arr[n]
的地址。
当我尝试从以下函数返回 arr 时:int *array_of_smallest(int count);
我得到:警告:从不兼容的指针类型“int (*)[n]”[-Win兼容指针类型]分配给“int *”
如果我初始化另一个指针并将其指向数组,然后返回它,我只返回一个一维数组。
我认为我正在混合不同的概念并使自己感到困惑。
使用指针数组我没有问题,但我想要一种更简单的方法来创建 2D 数组,也更容易释放,但我无法从我的函数返回该数组。
最佳答案
您声明了一个变量修饰类型类型 int ( * )[n] 的指针。
int (*arr)[n] = malloc( sizeof *arr * i );
即声明符中使用的变量n
不是整型常量表达式。
在这种情况下,函数的返回类型应为void *
。它可以这样声明
void * array_of_smallest(int count)
{
int (*arr)[n] = malloc( sizeof *arr * i );
//...
return arr;
}
在调用者中您将写入
int ( *arr )[n] = array_of_smallest( count );
在此声明中,n
的值必须与函数内使用的值相同。
如果使用整数常量表达式,例如
int (*arr)[2] = malloc( sizeof *arr * 2 );
那么函数声明将如下所示
int ( * array_of_smallest(int count) )[2];
或者您可以在函数声明之前引入 typedef 名称,例如
typedef int Array[2];
在这种情况下,函数将如下所示
Array * array_of_smallest(int count);
关于c - 如何返回二维数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72516183/