如何使用由复合文字定义的结构成员?

How to use a member of a structure defined by a compound literal?

我找到了这段代码,它使用了一个指向由复合文字构成的结构的指针:

int main()
{
   struct s {int i; int x;} *p;
   int j = 0;

   p = &((struct s){ j++ });
}

我的问题是:

在复合文字中,任何未指定的成员都会被默认初始化,就像对象的初始化列表一样。所以

(struct s){ j++ })

等同于

(struct s){ j++, 0 })

j++jj 递增之前的旧值,就像在任何其他赋值中一样。所以这将设置 p->i = 0j = 1.

您可以使用指针解除引用来访问成员。

int x = p->x;
int i = p->i;