我正在尝试使用大括号初始化一个结构,但我真的试图初始化从malloc调用返回的指针所指向的结构。
typedef struct foo{
int x;
int y;
} foo;
foo bar = {5,6};
我理解如何做到这一点,但我需要在这种情况下这样做。
foo * bar = malloc(sizeof(foo));
*bar = {3,4};
答案 0 :(得分:6)
(这已在评论中得到解答,因此将其作为CW)。
您需要投射作业的右侧,如下所示:
*bar = (foo) {3,4};
正如@cremno在评论中指出的那样,这不是演员,而是复合文字的分配
C99标准的相关部分是: 6.5.2.5复合文字,其中包含:
由带括号的类型名称组成的后缀表达式 后面跟一个括号括起来的初始化列表是一个化合物 文字。它提供了一个未命名的对象,其值由 初始化列表
答案 1 :(得分:1)
bar是一个指针,用于保存对malloced foo struct
的引用使用bar->x=3;bar->y=4