如何在C中声明结构数组

时间:2019-02-28 21:42:55

标签: c arrays struct

在用数据填充结构之前,我很难声明一个结构数组。

我的结构如下:

typedef struct {
  uint8_t * p_data;     ///< Pointer to the buffer holding the data.
  uint8_t   length;     ///< Number of bytes to transfer.
  uint8_t   operation;  ///< Device address combined with transfer direction.
  uint8_t   flags;      ///< Transfer flags (see @ref NRF_TWI_MNGR_NO_STOP).
} nrf_twi_mngr_transfer_t;

在我的代码中,我试图像这样声明数组:

struct nrf_twi_mngr_transfer_t start_read_transfer[10];

但是我得到一个编译错误:

  

数组类型的元素类型'struct nrf_twi_mngr_transfer_t'不完整

我进行了搜索,因为我认为这是很平常的事情,但是我不知道自己在做什么错。也许因为其中一个元素是指针?但是那个指针应该是固定大小的吧?

非常感谢

1 个答案:

答案 0 :(得分:5)

看起来有些解释是适当的。这段代码

typedef struct {
    //...
} nrf_twi_mngr_transfer_t;

已经定义了一个类型,可以直接使用。相反,

struct nrf_twi_mngr_transfer_struct {
    //...
};

将定义一个结构名称,要访问它,您需要指出您正在引用一个结构。

因此,鉴于以上两个定义,您应该以不同的方式定义数组:

nrf_twi_mngr_transfer_t arr[10]; // if using typedef
struct nrf_twi_mngr_transfer_struct arr2[10]; // if using struct with no typedef

以防万一您想知道,

struct {
    //...
} nrf_twi_mngr_transfer_obj;

定义一个匿名结构类型的对象。