c - 如何返回二维数组?

标签 c implicit-conversion return-type function-declaration variable-length-array

我正在寻找一种有效的方法来创建二维数组并返回它,通常我会创建一个指针数组,为每个指针分配内存,然后返回一个 **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/

相关文章:

c# - 如何将 .net 属性应用于返回类型

c++ - 动态包含一个 CUDA 文件

c++ - 转换和向上转型

Scala:如何使用隐式参数定义匿名函数?

c++ - 使用特殊化可变参数模板

c++ - 如果稍后定义返回对象的类,我应该如何从转换函数返回对象?

c - 如何以root身份执行命令

C:应用于数组与指针的&符号运算符

c - 有没有办法在链接静态库时进行预处理?

java - 集合中 Scala.Long 和 Java.lang.Long 之间的隐式转换