• typedef解释

    1
    2
    3
    4
    5
    struct node{
    int data;
    struct node *link;
    }//通常使用这种方法创建链表结点,但是每次使用"结点",我们都需要敲出"struct node"
    //同样,使用自引用指针需要"struct node *",非常的麻烦,而且在一个c语言文件中不只有一类结点时非常混乱

    基于此我们引入"typedef",typedef 类似于重命名操作,和"define"非常相似

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #define max 1000 //这里我们把max"转换"成1000(本人菜菜,想不到专业的话来解释,因此使用“转换”一词)
    typedef int elementType //这里我们使用 typedef 重命名 int 为 elementType
    //typedef 的作用对象一般是"类型",
    //类型包含系统自带的类型:char, short, int, long, long long, float, double等等
    //也包含用户自定义的类型:结构体
    //考虑链表结点的创建
    struct node{
    int data;
    struct node *link;
    }//这里的struct node就是用户自定义类型,因此可以使用typedef进行"改名"操作
    typedef struct node{
    int data;
    struct node *link;//到这一步还未完成重命名操作,因此不可以用重命名之后的指针来替换struct node *
    }Node,*Nodeptr;//一般把重命名的名字写在大括号后面。
    //这里的操作可以解释为以下两条语句
    typedef struct node Node;//Node 表示struct node
    typedef struct node * Nodeptr;//Nodeptr 表示struct node *
    //考虑如下代码
    int *a, b;//这里的a是int*型的指针,而b是int整型
    struct node *a, b;//这里a是struct node *型的指针,b却是自定义类型struct node;
    Nodeptr a, b;//这里用Nodeptr表示struct node *,不是简单的替换关系,a和b都是struct node* 型的指针。