【发布时间】:2018-06-14 14:37:13
【问题描述】:
我是 C 新手,我正在尝试理解复合文字的语法。我的问题类似于Initializing a pointer to compound literals in C,但我认为这不能回答它。如果有一个结构和一个类型定义为指向结构的指针,如下所示:
typedef struct thing *thing_t;
struct thing
{
int id;
char *name;
};
然后我可以像这样创建一个thing_t:
thing_t instance = & (struct thing) {
.id = 1,
.name = "A"
};
我想知道是否有一种方法可以在不明确引用 struct thing 的情况下初始化 thing_t,例如我试过这个看看它是否是有效的语法:
thing_t instance = (* thing_t) {
.id = 1,
.name = "A"
};
但是编译器错误。编译器必须“知道”thing_t 类型拥有一个指向thing 的指针,但是是否存在允许在此上下文中互换使用两者的语法?
(对此我没有特定的用例,我只是想了解类型和结构是如何相关的)。
【问题讨论】:
-
不要将指针隐藏在 typedef 后面。
typedef struct thing thing_t;- 问题解决了。 -
试试
->而不是.,这可能会奏效 -
当您是 C 新手时,在使用指向复合文字的指针时可能需要注意生命周期。
标签: c pointers compound-literals