【问题标题】:How to declare array of structs in C如何在 C 中声明结构数组
【发布时间】:2019-02-28 21:42:55
【问题描述】:

在用数据填充结构数组之前,我无法声明它们。

我的结构是这样的:

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'

我已经四处搜索,因为我认为这应该是一件常见的事情,但我无法弄清楚我做错了什么。也许是因为其中一个元素是指针?但是那个指针应该是固定大小的吧?

非常感谢

【问题讨论】:

  • nrf_twi_mngr_transfer_t start_read_transfer[10]; - 即不需要struct,你已经在定义它了。
  • 没有定义struct nrf_twi_mngr_transfer_t 类型。您的 typedef 定义了名为 nrf_twi_mngr_transfer_t 的类型,恰好是 struct
  • 在使用 typedef 名称时去掉 strict 关键字。

标签: c arrays struct


【解决方案1】:

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

typedef struct {
    //...
} nrf_twi_mngr_transfer_t;

已经定义了一个可以直接使用的type。相比之下,

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;

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

【讨论】:

  • 完美。我想多了。。谢谢!
猜你喜欢
  • 2021-03-23
  • 1970-01-01
  • 2018-05-13
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 2015-04-23
  • 1970-01-01
  • 2021-12-13
相关资源
最近更新 更多