初始化Malloc';ed结构
我试图使用大括号初始化一个结构,但实际上我试图初始化由malloc调用返回的指针指向的结构初始化Malloc';ed结构,c,malloc,structure,C,Malloc,Structure,我试图使用大括号初始化一个结构,但实际上我试图初始化由malloc调用返回的指针指向的结构 typedef struct foo{ int x; int y; } foo; foo bar = {5,6}; 我知道怎么做,但我需要在这样的背景下做 foo * bar = malloc(sizeof(foo)); *bar = {3,4}; (这在评论中得到了回答,因此将其定为CW) 你需要在作业的右侧施法,如下所示: *bar = (foo) {3,4}; 正如@crem
typedef struct foo{
int x;
int y;
} foo;
foo bar = {5,6};
我知道怎么做,但我需要在这样的背景下做
foo * bar = malloc(sizeof(foo));
*bar = {3,4};
(这在评论中得到了回答,因此将其定为CW)
你需要在作业的右侧施法,如下所示:
*bar = (foo) {3,4};
正如@cremno在评论中指出的,这不是演员阵容,而是复合文字的赋值
C99标准的相关章节为:6.5.2.5复合文字,其中说明:
由括号中的类型名组成的后缀表达式
紧跟在括号中的初始值设定项列表后面的是一个复合词
字面意义的。它提供一个未命名的对象,其值由
初始值设定项列表
bar是一个指针,它保存对malloced foo结构的引用
使用
bar->x=3;bar->y=4
*bar=(foo){3,4}代码>谢谢,成功了!它可能看起来像一个cast操作符,但它不是。整件事都是复合文字。@cremno似乎是这样。说得好。我已经更新了答案,引用了标准。我知道如何像那样初始化它,我专门寻找大括号初始化。在这种情况下,*bar=(foo){3,4}代码>应该是单词。