如何在 C 中声明结构数组
Posted
技术标签:
【中文标题】如何在 C 中声明结构数组【英文标题】:How to declare array of structs in 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 关键字。
【参考方案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;
定义一个匿名结构类型的对象。
【讨论】:
完美。我想多了。。谢谢!以上是关于如何在 C 中声明结构数组的主要内容,如果未能解决你的问题,请参考以下文章