如何使用由复合文字定义的结构成员?
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++ });
}
我的问题是:
j++
如何成为修改 i
and/or 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;
我找到了这段代码,它使用了一个指向由复合文字构成的结构的指针:
int main()
{
struct s {int i; int x;} *p;
int j = 0;
p = &((struct s){ j++ });
}
我的问题是:
j++
如何成为修改i
and/orx
及其计算结果的有效表达式?- 以及如何访问成员
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;