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_t
s MiddleEast
,SouthernEurope
和Egypt
,我可以Southern Europe
成功设置第一个连接,但是当我尝试设置为时.(connections + 1)
,&Egypt
我得到了编译器错误
error: expected identifier before ‘(’ token
如何正确访问下一个内存地址?
解决方案不是void *
,它正确使用结构.
具有名称的结构可以在其自身内引用.该类型不存在,但命名结构有,所以你可以写:
typedef struct region{
char* name;
struct region* connections;
} region_t;
Run Code Online (Sandbox Code Playgroud)