zoukankan      html  css  js  c++  java
  • C++-Typedef结构体遇上指针

      继Typedef遇上结构体数组后,我们又产生了新的疑问。

      上一期地址:https://www.cnblogs.com/lemaden/p/10122929.html  

      昨天一位朋友又问我了,说结构体数组遇上typedef我懂了,就是数组拥有三个特性:1.首地址 2.数组的长度 3. 数组的步长(元素类型),typedef只是重定义了数组的长度和类型。

      那么今天的typedef跟结构体指针你怎么解释呢?我们看下问题的代码:

    typedef struct LNode
    {                                                      // Singly linked list Node
         int    data; 
         struct LNode   *next;                   // Pointer to next node
    }LNode,*LinkList;            
    

      在链表中定义节点时,经常会看到上面的第四行,strcut LNode *next,这里仿佛是在边定义节点类型,又在里面定义指针域,其实这样是可以的,记住:在C语言中,只有这里可以这样用,其他地方都不可以,而且只能是指针,不能是结构体变量,否则会陷入无限递归。

      第三行就不用解释了,一个数据域。那么三四行我们都解决了。继续往下走。

      第五行右括号 { 第一个类型LNode比较好解释。

      是为struct LNode 创建一个简单的别名,以后就用LNode代替它了。

      那么*LinkList呢?

      我们把它单纯拿出来:

    typedef struct LNode
    {                                                      // Singly linked list Node
         int    data; 
         struct LNode   *next;                   // Pointer to next node
    }*LinkList;  
    

      一句话解释清楚:把* 与前面的struct LNode放在一起,是不是就清楚了?

    typedef struct LNode {....}*     LinkList 
    

      我们可以拿基本类型来示范下:

    typedef int* Pointer;
    Pointer p;    //指向整型类型的指针P

      那么回到上面的例子,LinkList 是不是就是指向结构体类型的指针了。

      这里的LinkList应该就是头指针了,指向整个链表,而前面的LNode应该就是节点。

      

      

  • 相关阅读:
    【IDDFS】Power Calculus
    【A*/K短路】 [USACO08MAR]Cow Jogging G
    P1880 [NOI1995]石子合并
    【区间DP】[USACO16OPEN]248 G
    【树上背包】P1273 有线电视网
    【分组背包】[BJOI2019]排兵布阵
    DP学习笔记——背包专题
    【思维/构造】D
    【线段树+扫描线】P5490 【模板】扫描线
    【最小生成树】畅通工程再续 HDU
  • 原文地址:https://www.cnblogs.com/lemaden/p/10169118.html
Copyright © 2011-2022 走看看