0

我在c(gcc)中有以下形式:

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

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

4

1 回答 1

0

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

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

于 2012-11-08T21:41:26.867 回答