如何在C中声明结构数组

bga*_*ood 0 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;
Run Code Online (Sandbox Code Playgroud)

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

struct nrf_twi_mngr_transfer_t start_read_transfer[10];
Run Code Online (Sandbox Code Playgroud)

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

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

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

非常感谢

Ser*_*eyA 5

看起来有些解释是有道理的.这段代码

typedef struct {
    //...
} nrf_twi_mngr_transfer_t;
Run Code Online (Sandbox Code Playgroud)

已经定义了一种可以直接使用的类型.相反,

struct nrf_twi_mngr_transfer_struct {
    //...
};
Run Code Online (Sandbox Code Playgroud)

将定义结构名称,并且要访问它,您需要指明您指的是结构.

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

nrf_twi_mngr_transfer_t arr[10]; // if using typedef
struct nrf_twi_mngr_transfer_struct arr2[10]; // if using struct with no typedef
Run Code Online (Sandbox Code Playgroud)

如果你想知道,

struct {
    //...
} nrf_twi_mngr_transfer_obj;
Run Code Online (Sandbox Code Playgroud)

定义匿名结构类型的对象.