1

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

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

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

我的问题是:

  • 用于修改和/或评估j++的有效表达式如何?ix
  • 我怎样才能访问会员ix?的指针偏移量p
4

1 回答 1

3

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

(struct s){ j++ })

相当于

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

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

您可以使用指针取消引用来访问成员。

int x = p->x;
int i = p->i;
于 2020-03-02T18:26:28.893 回答