结构初始化错误

Jus*_*tin 6 c struct initialization

我知道如何初始化结构(通常),但我在结构体中遇到了这个结构的麻烦

typedef struct Location{
    uint8_t x;
    uint8_t y;
} loc;

typedef struct Person{
    loc location;
} person;
Run Code Online (Sandbox Code Playgroud)

全局变量:

static person hero;
Run Code Online (Sandbox Code Playgroud)

初始化函数:

void InitializeHero() {
    person hero = {0,0, {0,0}}; // this compiles
    hero.location = {0,0}; // but this does not compile
    hero = {0,0,{0,0}}; // this also does not compile
}
Run Code Online (Sandbox Code Playgroud)

Car*_*rum 3

您的“此编译”行是正确的;这是一个初始化。另外两行无法编译,因为它们不是初始化,而是赋值。如果您使用的是足够新的 C 版本,则可以使用复合文字来完成赋值:

hero.location = (loc){0,0};
hero = (person){0,0,{0,0}};
Run Code Online (Sandbox Code Playgroud)

注意 - 您person heroInitializeHero全局变量的阴影中声明;你可能不想要那样。

顺便说一句,您是否缺少某些字段person?这些都不应该与您所展示的内容相编译。