在结构中设置void*的第n个成员(以及结构名称用法与typedef)

Ste*_*rus 3 c struct void-pointers

对于类似风险的游戏,我有一个每个区域的结构,每个区域都需要有一个部队可以从母区移入的相关区域列表.

从理论上讲,它看起来像

typedef struct {
    char* name;
    region_t* connections;
} region_t;
Run Code Online (Sandbox Code Playgroud)

但是,这当然是不可能的,因为在解析器到达类型region_t*之前region_t不存在.因此我选择使用void*代替region_t*.

typedef struct {
    char* name;
    void* connections;
} region_t;

MiddleEast.connections = malloc(6 * sizeof(void*));
MiddleEast.connections = &SouthernEurope;
MiddleEast.(connections + 1) = &Egypt;
Run Code Online (Sandbox Code Playgroud)

使用region_ts MiddleEast,SouthernEuropeEgypt,我可以Southern Europe成功设置第一个连接,但是当我尝试设置为时.(connections + 1),&Egypt我得到了编译器错误

error: expected identifier before ‘(’ token

如何正确访问下一个内存地址?

Ste*_*rus 6

解决方案不是void *,它正确使用结构.

具有名称的结构可以在其自身内引用.该类型不存在,但命名结构有,所以你可以写:

typedef struct region{
    char* name;
    struct region* connections;
} region_t;
Run Code Online (Sandbox Code Playgroud)