我在c(gcc)中有以下表格:
typedef struct {
mem 1;
mem 2;
mem n;
} *obj;
如何从obj var;
初始化的结构类型中获取特定成员?
答案 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
来隐藏指针。
功能