V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
writerG
V2EX  ›  问与答

一个 C 语言结构体问题(链表相关)

  •  
  •   writerG · 2020-03-17 18:02:37 +08:00 · 1414 次点击
    这是一个创建于 1711 天前的主题,其中的信息可能已经有所发展或是发生改变。
    代码如下:
    typedef struct LNode{
    ElemType data; //节点的数据域
    struct LNode *next; //节点的指针域
    }LNode,*LinkList;


    Status InitList(LinkList &L){
    L= (LinkList)malloc(sizeof(LNode)); //生成新节点作为头结点,用头指针 L 指向头结点
    L->next = NULL; //头结点的指针域置空
    return OK;
    }

    这个 LinkList 是啥啊,这个 typedef 的用法,我也有点儿看不懂了。。。是把这个结构体命名为 LNode 和*LinkList 了??
    8 条回复    2020-03-18 06:08:10 +08:00
    BiteTheDust
        1
    BiteTheDust  
       2020-03-17 18:28:39 +08:00
    建议别看了 我也看不懂
    lcdtyph
        2
    lcdtyph  
       2020-03-17 18:35:27 +08:00 via iPhone
    LinkList 就是 struct LNode *
    这个 typedef 拆开就好看了

    定义一个指针:
    typedef int *pint;
    int a = 3;
    pint pa = &a;
    writerG
        3
    writerG  
    OP
       2020-03-17 18:48:10 +08:00
    @lcdtyph

    那个初始化的函数呢。。
    参数是 LinkList &L
    这是啥意思啊?
    lcdtyph
        4
    lcdtyph  
       2020-03-17 18:50:36 +08:00 via iPhone
    @writerG
    这是 C++的引用
    Jirajine
        5
    Jirajine  
       2020-03-17 19:19:33 +08:00 via Android
    typedef 就是把组合了一堆东西的 declarator“封装”成一个“单词”(type name)直接当做一个新的 type 使用。
    C/C++的 declarator 那一套规则很恶心,完全无法理解其组合方向、优先顺序的设计到底是什么理念。
    ipwx
        6
    ipwx  
       2020-03-17 19:28:32 +08:00   ❤️ 1
    先学会 C 的类型声明,比如:

    int a; // a 是 一个整型
    int *a; // a 是 一个指向整型的指针
    int *a[1024]; // a 是一个 1024 个指向整型的指针的数组
    int (*f)(int,int); // f 是一个指向 int(int,int) 函数的指针
    char* (*g)(char*); // g 是一个指向 char*(char*) 函数的指针

    然后 typedef 你直接套进去,定义出来的变量和上面每一行一一等价。

    typedef int A; A a;
    typedef int* A; A a;
    typedef int* A[1024]; A a;
    typedef int (*F)(int, int); F f;
    typedef char* (*G)(char*); G g;

    最后,typedef struct { ... } YYY; 等价于:

    struct XXX { ... }
    typedef struct XXX YYY;

    只不过就是省略了一个 struct XXX 的中间别名。
    season4675
        7
    season4675  
       2020-03-17 19:55:39 +08:00
    有引用,这个是 C++不是 C……本来想多说点的,上面都回答了……
    msg7086
        8
    msg7086  
       2020-03-18 06:08:10 +08:00
    刚想说这是 C++不是 C,结果上面都说了……
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2726 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 02:10 · PVG 10:10 · LAX 18:10 · JFK 21:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.