初始化Malloc'ed结构

And*_*ant 4 c malloc structure

我试图使用大括号初始化一个结构,但我真的试图初始化从malloc调用返回的指针指向的结构.

typedef struct foo{
    int x;
    int y;
} foo;

foo bar = {5,6};
Run Code Online (Sandbox Code Playgroud)

我知道如何做到这一点,但我需要在这种情况下这样做.

foo * bar = malloc(sizeof(foo));
*bar = {3,4};
Run Code Online (Sandbox Code Playgroud)

jpw*_*jpw 7

(这在评论中得到了回答,因此将其作为CW).

您需要投射任务的右侧,如下所示:

*bar = (foo) {3,4};
Run Code Online (Sandbox Code Playgroud)

正如@cremno在评论中指出的那样,这不是一个演员,而是一个复合文字的赋值

C99标准的相关部分是:6.5.2.5复合文字,其中说:

后缀表达式由带括号的类型名称后跟括号括起的初始值设定项列表组成,是一个复合文字.它提供了一个未命名的对象,其值由初始化列表给出

  • 它可能看起来像一个演员,但它不是一个.整个事情是复合文字. (3认同)