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

问题描述 投票:1回答:1

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

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

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

我的问题是:

  • j++如何有效地用于修改i和/或x以及对其进行求值?
  • 并且我如何访问成员ixp的指针偏移量?
c pointers syntax structure compound-literals
1个回答
3
投票

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

(struct s){ j++ })

等效于

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

j++j递增之前的j的旧值,就像其他分配一样。因此,这将设置p->i = 0j = 1

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

int x = p->x;
int i = p->i;
© www.soinside.com 2019 - 2024. All rights reserved.