在结构中初始化结构?

dco*_*ina 2 c struct memory-management initialization variable-assignment

所以我有以下两种结构

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

typedef struct vartable {
    int tableid;
    int randominfo;
    struct vartable *next;
} vartable;
Run Code Online (Sandbox Code Playgroud)

我想像这样初始化他们.

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

但是当我去编译时,我会继续得到一个

expected expression before { token 
Run Code Online (Sandbox Code Playgroud)

错误.我也尝试过{10,NULL}无济于事.

我究竟做错了什么?

另外,我需要malloc同时clientable和所有的客户表中的表,或将只是malloc荷兰国际集团的一个工作?

alk*_*alk 6

我究竟做错了什么?

这个

maintable->head = ...
Run Code Online (Sandbox Code Playgroud)

不是初始化,而是作业.

这个

... = {.tableid = 10, .randominfo=NULL, .next=NULL};
Run Code Online (Sandbox Code Playgroud)

但是只能用于初始化.

所以将后者改为此

... = (vartable) {.tableid = 10, .randominfo=0, .next=NULL};
Run Code Online (Sandbox Code Playgroud)

使用复合文字的作业.


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

真的不知道你是"指的是什么所有表 ",但分配clienttable-typed变量你分配为它的成员的内存headtail.你分配什么内存headtail的成员next 都指向.