我发现了这段代码,它使用了一个指向由复合文字构成的结构的指针:
int main()
{
struct s {int i; int x;} *p;
int j = 0;
p = &((struct s){ j++ });
}
我的问题是:
j++
如何有效地用于修改i
和/或x
以及对其进行求值?i
或x
? p
的指针偏移量?在复合文字中,任何未指定的成员都会被默认初始化,就像对象的初始化列表一样。所以
(struct s){ j++ })
等效于
(struct s){ j++, 0 })
j++
是j
递增之前的j
的旧值,就像其他分配一样。因此,这将设置p->i = 0
和j = 1
。
您可以使用指针解引用访问成员。
int x = p->x;
int i = p->i;