You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C语言链表编译警告:struct ListNode*与ListNode*指针类型不兼容

解决C语言链表指针类型不兼容警告

问题出在你的ListNode结构体定义上:你在typedef时没有给结构体指定标签,导致内部声明的struct ListNode *next/prev和typedef出来的ListNode类型不属于同一类型,编译器会把它们当成两种不同的指针类型,从而抛出不兼容警告。

修正方法

把结构体定义改成先给结构体加标签,再typedef的形式:

// 先定义带标签的结构体,再typedef别名
typedef struct ListNode {
    void *data;
    struct ListNode *next;
    struct ListNode *prev;
} ListNode;

typedef struct {
    ListNode *head;
    ListNode *tail;
    int size;
} LinkedList;

原理说明

  • 原来的写法中,typedef struct { ... } ListNode;里的结构体没有标签,内部的struct ListNode是一个全新的、未定义的结构体类型,和typedef出来的ListNode不是同一个东西。
  • 修正后,struct ListNode是结构体的正式标签,typedef后的ListNode是这个结构体的别名,两者指向同一个类型,指针赋值时类型就完全匹配了。

修改后你列出的所有assignment to ‘struct ListNode *’ from incompatible pointer type ‘ListNode *’警告都会消失。

内容的提问来源于stack exchange,提问作者Cindy_ l

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 17:29:58