访问结构中的成员?

时间:2014-10-05 19:46:02

标签: c pointers struct

如果我有以下结构:

struct myStruct {
    int value;
    struct myStruct *next;
};

并将实例视为

struct myStruct *the_struct = (void *) malloc(sizeof(struct myStruct))

如何访问"值" *下一个?


我试过做

the_struct->next.value

*(the_struct->next)->value

但我收到错误"取消引用指向不完整类型的指针。"

1 个答案:

答案 0 :(得分:1)

你应该使用

 the_struct->next->value

但在此之前,您应该确保the_struct->next有效。

BTW,malloc(3)确实失败了,并且在成功时它会提供未初始化的内存区域。所以请阅读perror(3)exit(3),然后代码:

struct myStruct *the_struct = malloc(sizeof(struct myStruct));
if (!the_struct) 
  { perror("malloc myStruct"); exit(EXIT_FAILURE); };
the_struct->value = -1;
the_struct->next = NULL;

(或者,使用memset(3)malloc成功结果的每个字节归零,或使用calloc代替malloc。< / p>

稍后,您可能同样获取并初始化struct myStruct* next_struct并最终分配the_struct->next = next_struct;,之后您可以分配the_struct->next->value = 32;(或者,在特定情况下,等同于next_struct->value = 32;

请编译所有警告和调试信息(gcc -Wall -g)并学习如何使用调试器(gdb)。在Linux上,还可以使用valgrind