从函数返回一个2d数组

我是一个新手C.
我试图从函数返回一个2d数组.
这是这样的
int *MakeGridOfCounts(int Grid[][6])
{
  int cGrid[6][6] = {{0,},{0,}};
  int (*p)[6] = cGrid;
  return (int*)p;
}

我知道这会导致错误,需要帮助.谢谢

解决方法

C语言有一个基本的缺陷:不可能从函数返回数组.
这有很多解决方法我会描述三个.

用指针替换为数组

返回一个指针而不是一个数组本身.这导致C中的另一个问题:当一个函数返回一个指向某个东西的指针时,它通常应该分配动态的东西.你不应该忘记以后再次分配(当不再需要数组时).

typedef int (*pointer_to_array)[6][6];

pointer_to_array workaround1()
{
    pointer_to_array result = malloc(sizeof(*result));
    (*result)[0][0] = 0;
    (*result)[1][0] = 0;
    (*result)[2][0] = 0;
    (*result)[3][0] = 0;
    (*result)[4][0] = 0;
    (*result)[5][0] = 0;
    return result;
}

用指针替换为int

一个2-D数组就像内存中的数字序列一样出现,所以你可以用一个指向第一个元素的指针替换它.你清楚地表示你想返回一个数组,但是你的示例代码返回一个指向int的指针,所以也许你可以相应地改变你的代码.

int *workaround2()
{
    int temp[6][6] = {{0}}; // initializes a temporary array to zeros
    int *result = malloc(sizeof(int) * 6 * 6); // allocates a one-dimensional array
    memcpy(result,temp,sizeof(int) * 6 * 6); // copies stuff
    return result; // cannot return an array but can return a pointer!
}

用结构包裹

这听起来很愚蠢,但函数可以返回结构,即使它们不能返回数组!即使返回的结构包含一个数组.

struct array_inside
{
    int array[6][6];
};

struct array_inside workaround3()
{
    struct array_inside result = {{{0}}};
    return result;
}

相关文章

/** C+⬑ * 默认成员函数 原来C++类中,有6个默认成员函数: 构造函数 析构函数 拷贝...
#pragma once // 1. 设计一个不能被拷贝的类/* 解析:拷贝只会放生在两个场景中:拷贝构造函数以及赋值运...
C类型转换 C语言:显式和隐式类型转换 隐式类型转化:编译器在编译阶段自动进行,能转就转,不能转就编译...
//异常的概念/*抛出异常后必须要捕获,否则终止程序(到最外层后会交给main管理,main的行为就是终止) try...
#pragma once /*Smart pointer 智能指针;灵巧指针 智能指针三大件//1.RAII//2.像指针一样使用//3.拷贝问...
目录<future>future模板类成员函数:promise类promise的使用例程:packaged_task模板类例程...