使用链表时从不兼容的指针类型赋值

Assignment from incompatible pointer type when using Linked Lists

我正在尝试使用一个简单的链表示例,试图理解使用它们背后的基本思想,以备后用。但是,我对如何将列表中的每个节点设置为特定值感到困惑。即在这里,我想将成员"a"设置为"b"的地址,将成员"b"设置为c的地址。然而,这是警告发生的地方,

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>

struct List
{
    int data;
    struct List * next;
};

int main (int argc, char * argv[])
{

    struct List * a = malloc(sizeof(struct List));
    a->data = 0;
    a->next = NULL;

    struct List * b = malloc(sizeof(struct List));
    b->data = 1;
    b->next = NULL;

    struct List * c = malloc(sizeof(struct List));
    c->data = 2;
    c->next = NULL;

    a->next = &b; //warning occurs here
    b->next = &c;
}

有没有办法在没有任何警告的情况下设置 a->next (a.next) 和 b->next(b.next) 的值?

a->next 属于 struct List *.

类型

b 属于 struct List *.

类型

&b 属于 struct List **.

类型

您可能打算这样做:a->next = b;

b 已经是指向 struct List 的指针,因此您不需要 & 运算符。

就这样:

a->next = b;