使用链表时从不兼容的指针类型赋值
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;
我正在尝试使用一个简单的链表示例,试图理解使用它们背后的基本思想,以备后用。但是,我对如何将列表中的每个节点设置为特定值感到困惑。即在这里,我想将成员"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;