从结构化指针Object获取成员

时间:2012-11-08 21:11:37

标签: gcc struct typedef

我在c(gcc)中有以下表格:

typedef struct {
  mem 1;
  mem 2;
  mem n;
} *obj;

如何从obj var;初始化的结构类型中获取特定成员?

1 个答案:

答案 0 :(得分:0)

首先,该声明无效,您尝试声明标识符为数字的成员。我假设你真的想要这个:

typedef struct foo {
    int mem_1;
    int mem_2;
    ...
} *obj;

使用点(.)访问普通结构成员:

struct foo bar;
bar.mem_1 = 2;

这很好,编译器自动分配正确大小的堆栈空间。 现在,由于您的obj var是指针 1 ,我们会使用箭头(->)访问其成员:

obj var;
var->mem_1 = 3;

当然,如果你很幸运,这将是段错误。如果没有,您可能会与调试器进行非常长时间的启发会话。与声明struct foo本身不同,声明obj var或其等效struct foo *var除了未初始化的指针外不会创建任何内容。您需要自己提供内存:

obj var = malloc(sizeof(*var));

请注意,这仅提供内存,其内容仍未定义,但您可以安全地分配给它们。

1:typedef像你已经完成的指针一样存在问题;如果没有看到typedef或被编译器告知,则无法知道是否需要使用.->。不要使用typedef来隐藏指针。 功能