加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-16 09:52:00 所属栏目:百科 来源:网络整理
导读:我是编程新手.我正在努力学习C和指针,但它给了我很多麻烦. 尝试实现单链表时出现以下错误.我在网上搜索,我找不到像我这样的错误的人,或者也许我根本无法理解我的问题. 以下是我收到的错误: 警告:初始化’NODE *’的指针类型不兼容 ??????(又名’struct nod
我是编程新手.我正在努力学习C和指针,但它给了我很多麻烦.
尝试实现单链表时出现以下错误.我在网上搜索,我找不到像我这样的错误的人,或者也许我根本无法理解我的问题.

以下是我收到的错误:

警告:初始化’NODE *’的指针类型不兼容
??????(又名’struct node *’),表达式为’struct NODE’
??????[-Wincompatible指针类型]
????????NODE 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初始化头部以使此条件成为工作

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

所以当你创建你的列表时,添加l-> head = NULL;

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

最后一个(我希望)当你创建你的第一个节点时,你忘记为它分配头部,并返回以便不添加第一个元素两次

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

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

而BTW,don’t cast malloc results in C

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读