我在c(gcc)中有以下形式:
typedef struct {
mem 1;
mem 2;
mem n;
} *obj;
如何从该类型的结构中获取特定成员,初始化为obj var;
?
首先,该声明无效,您试图声明标识符为数字的成员。我假设你真的想要这个:
typedef struct foo {
int mem_1;
int mem_2;
...
} *obj;
您可以使用点 ( .
) 访问普通结构成员:
struct foo bar;
bar.mem_1 = 2;
这很好,编译器会自动分配正确大小的堆栈空间。现在,由于 yourobj var
是指针1,我们将使用箭头 ( ->
) 访问其成员:
obj var;
var->mem_1 = 3;
当然,如果你幸运的话,这将是段错误。如果没有,您可能会与调试器进行一次非常长且富有启发性的会话。与声明 astruct foo
本身不同,Declaringobj var
或其等价物struct foo *var
除了未初始化的指针外不会创建任何东西。您需要自己为此提供内存:
obj var = malloc(sizeof(*var));
请注意,这仅提供内存,其内容仍未定义,但您可以安全地分配给它们。
1:这就是typedef
像您所做的那样删除指针的问题;不可能知道您是否需要使用.
或->
没有看到 typedef 或被编译器告知。不要typedef
用来隐藏指针。