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

moo*_*ker 3 c malloc struct pointers

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

struct person
{
  uint8_t age;
  uint16_t * datablock;
} mike = { 2, malloc(4) };
Run Code Online (Sandbox Code Playgroud)

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

初始化元素对于数据块成员不是常量.

我正在使用GCC.

眠りネ*_*ネロク 5

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

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

struct person
{
  uint8_t age;
  uint16_t * datablock;
} mike = { 2, NULL };
Run Code Online (Sandbox Code Playgroud)

为什么你的代码不能编译?

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 };
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,地址data是在编译时已知的,因此您可以将其用作struct的成员的初始化程序.