有没有办法在声明时初始化 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/