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

标签 c pointers struct malloc

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

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

我试过上面的代码,但我得到:

initializer element is not constant for the datablock member.

我正在使用 GCC。

最佳答案

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

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

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

关于c - 在 C 结构中的声明时初始化指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45501413/

相关文章:

c - 将函数传递给结构数组内的指针

c - 用C实时写入文件

c - 如何解决 Unresolved inclusion : <mongoc. h>?

pointers - 从非指针结构元素转到链表指针赋值

c - 指针或指针到指针

arrays - Valgrind错误-条件跳转或移动取决于未初始化的值

c++ - 静态成员变量的构造函数和析构函数(指针)

c - 结构元素测试为空

c++用std::string读写结构数组到二进制文件

swift - 为什么 Apple 选择使用嵌套结构类型来替换 'String' 类型参数?