初始化Malloc';ed结构

初始化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

我试图使用大括号初始化一个结构,但实际上我试图初始化由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};
正如@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}应该是单词。