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

Moonraker

有没有一种方法可以在声明时初始化C结构中的指针:

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

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

对于数据块成员,初始化器元素不是恒定的。

我正在使用GCC。

睡觉的Neroku

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

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

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在编译时是已知的,因此您可以将其用作结构成员的初始化程序。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章