在 C 结构中的声明时初始化指针



有没有办法在声明时初始化 C 结构中的指针:

struct person
{
uint8_t age;
uint16_t * datablock;
} mike = { 2, malloc(4) };

我已经尝试了上面的代码,但我得到:

初始值设定项元素对于数据块成员不是常量。

我正在使用海湾合作委员会。

如何在声明时初始化结构的成员

您可以通过编译时常量在声明结构时初始化结构的成员,如下面的代码所示:

struct person
{
uint8_t age;
uint16_t * datablock;
} mike = { 2, NULL };

为什么你的代码不编译?

但是,malloc(4)是一个函数调用,它将在运行时执行。因此,您收到的错误消息确实非常准确。


运行时分配的替代

方法但是,您可以执行以下操作:

#define NUM 2 // change NUM at will
static uint16_t data[NUM]; // memory that will be allocated
struct person
{
uint8_t age;
uint16_t * datablock;
} mike = { 2, data };

请注意,在这种情况下,data的地址在编译时是已知的,因此您可以将其用作结构成员的初始值设定项。

相关内容

  • 没有找到相关文章

最新更新