gpt4 book ai didi

c - 使用结构的不兼容指针类型错误

转载 作者:太空狗 更新时间:2023-10-29 16:01:43 25 4
gpt4 key购买 nike

我是编程新手。我正在尝试学习 C 和指针,但这给我带来了很多麻烦。尝试实现单链表时出现以下错误。我在网上搜索,但找不到和我一样有错误的人,或者也许我只是无法理解我的问题。

以下是我收到的错误:

警告:不兼容的指针类型正在初始化“NODE *” (又名“struct node *”),表达式类型为“struct NODE ” [-Win 兼容指针类型] 节点 temp = (*l)->head;

    NODE* temp = (*l)->head;

在main中,我传递了LIST类型变量的地址。所以,我想我必须取消引用“l”,以获取 LIST 类型所在的地址,然后我必须用箭头取消引用以获取 NODE 所在的地址。我哪里糊涂了?我非常感谢您的帮助。

下面你会看到我写的代码:

typedef struct node {
int value;
struct node* next;
}NODE;

typedef struct list{
struct NODE* head;
}LIST;

void insert(LIST** l, int x){

if((*l)->head == NULL){

NODE* new_Node = (NODE*) malloc(sizeof(NODE));
new_Node->next = NULL;
new_Node->value = x;
}

NODE* temp = (*l)->head;

while(temp->next != NULL){
temp=temp->next;
}

NODE* new_Node = (NODE*) malloc (sizeof(NODE));
temp->next = new_Node;
new_Node->next = NULL;
new_Node->value = x;
}

int main(){

LIST *l = (LIST*) malloc(sizeof(LIST));

insert(&l, 5);

return 0;
}

最佳答案

我猜你的问题出在这里:

typedef struct list
{
struct NODE* head;
}LIST;

只需删除 NODE 之前的 struct 关键字即可

typedef struct list
{
NODE* head;
}LIST;

typedef struct list
{
struct node* head;
}LIST;

您还需要使用 NULL 初始化 head 以使此条件生效

  if((*l)->head == NULL) .....

因此,当您创建列表时,添加 l->head = NULL;

      LIST *l = malloc(sizeof(LIST));
l->head = NULL;

最后一个(我希望)当你创建你的第一个节点时,你忘记了分配 head 给它,为了不添加第一个元素两次而返回

      if((*l)->head == NULL)
{

NODE* new_Node = malloc(sizeof(NODE));
new_Node->next = NULL;
new_Node->value = x;
(*l)->head = new_Node;
return;
}

顺便说一句,don't cast malloc results in C

关于c - 使用结构的不兼容指针类型错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23356184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com