将二维数组分配为结构成员

Posted

技术标签:

【中文标题】将二维数组分配为结构成员【英文标题】:assigning 2D array as a struct member 【发布时间】:2022-01-02 17:31:30 【问题描述】:

我需要创建一个以 2D bool 数组为成员的结构,因此我将其设为双指针,如下所示。不,每当我尝试将二维数组对象分配给这个结构成员时,我都会遇到问题,我会收到一个警告,指出它是不可兼容的指针类型。无论如何要分配它(不复制,因为我没有对象只有双指针作为结构成员)

#include <stdlib.h>
#include <stdbool.h>
#include <stdint.h>



typedef struct

    bool** object;
entry_t;

bool testObject[3][6];

entry_t entry =

        .object = testObject
;

收到的警告

warning: initialization of '_Bool **' from incompatible pointer type '_Bool (*)[6]' [-Wincompatible-pointer-types]

【问题讨论】:

这可能会有所帮助:***.com/q/64191228/10553341。重复? 【参考方案1】:

指针指向指针不是数组。它不是二维数组。它不是指向数组的指针。它不能指向数组。

指针到指针的一个非常特殊的用例是让它指向指针数组的第一个成员。这在声明指向字符串的指针数组时非常有用。

bool testObject[3][6]; 是一个二维数组 - 一个数组数组。第一项是bool [6] 类型的数组。为了指向它,您需要一个bool (*)[6] 类型的指针。因此正确的代码是:

typedef struct

  bool (*object)[6];
entry_t;

bool testObject[3][6];

entry_t entry =

  .object = testObject
;

【讨论】:

以上是关于将二维数组分配为结构成员的主要内容,如果未能解决你的问题,请参考以下文章

java数组(一维数组,二维数组)

C中结构体内有一个成员是二维数组,可以直接赋值另一个一维数组吗?

使用 NULL 数组将内存分配给二维数组 (c)

在 C++ 中初始化动态二维数组

如何在 C 中动态分配二维数组? [复制]

将二维数组复制到函数外部动态分配的二维数组