我正在尝试创建一个指向同一类型的另一个Node的Node结构。
我的结构看起来像这样:
typedef struct Node {
int value;
struct Node *next;
} Node;
我可以使用普通的malloc初始化它并分配结构的属性,如下所示:
Node *top = malloc(sizeof(Node));
top->value = 1;
top->next = NULL;
但如果我尝试使用带结构的指定init,它就会失败。
Node *next = {.value = 2, .next = {NULL, NULL}}; // warning: excess elements in scalar initializer
我也累了:
Node *next = {2, NULL}; // incompatible integer to pointer conversion initializing 'Node *'
Node *next = {NULL, 2}; // excess elements in scalar initializer
唯一可行的init就是将其全部分配为零
Node *next = {0}; // no error
编译我正在使用以下命令
gcc -Wall foo.c -o foo
答案 0 :(得分:1)
您可以静态地构建一个列表:
Node node2 = { .value = 2, .next = NULL };
Node node1 = { .value = 1, .next = &node2 };
Node *first = &node1;
如果为节点使用自动存储类,请确保在到达封闭块结束后永远不要使用它们,因为它们将不再有效。
答案 1 :(得分:0)
分配内存后,您可以使用复合文字来设置字段:
Node *p = malloc(sizeof(Node));
if (!p) {
perror("malloc failed");
exit(1);
}
*p = (Node){ .value = 1, .next = NULL };