我在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用来隐藏指针。