在结构中初始化结构?

时间:2015-12-14 18:50:05

标签: c memory-management struct initialization variable-assignment

所以我有以下两种结构

typedef struct clienttable {
    vartable head;
    vartable tail;
} clienttable;

typedef struct vartable {
    int tableid;
    int randominfo;
    struct vartable *next;
} vartable;

我希望像这样初始化他们。

clienttable *maintable;
maintable = (clienttable *) malloc (sizeof( clienttable));
maintable->head = {.tableid = 10, .randominfo=NULL, .next=NULL};

但是当我去编译时,我一直在

expected expression before { token 

错误。我只试过{10,NULL}也无济于事。

我做错了什么?

此外,我是否需要malloc clientable和客户端表中的所有表,或仅malloc一个工作?

1 个答案:

答案 0 :(得分:6)

  

我做错了什么?

maintable->head = ...

不是初始化,而是作业。

... = {.tableid = 10, .randominfo=NULL, .next=NULL};

但只能用于初始化。

所以将后者改为

... = (vartable) {.tableid = 10, .randominfo=0, .next=NULL};

使用复合文字的作业。

  

...我是否需要malloc客户端表中的clientable和所有表,或者只是mallocing一个工作?

不确定你所指的是什么" 所有表",但是通过分配一个clienttable类型的变量,你可以为它分配内存成员headtail。您headtail成员next指向的内容分配内存。