浅析 typedef struct 和 struct在定义结构体和链表中的作用

       因为我是从C++入门的,对于C语言中很多知识不是很了解,所以经常会遇到在C++中没见过的表达形式,在这里记录一下学习历程,同时也希望能够帮助到后来者。关于typedef struct 和 struct 的区分网上有很多,但是都说得错综复杂,感觉没有get到正确的点。通过资料的整理,我认为它们之间的区分只需要记住下面几点即可:

  1. typedef是C语言中的关键字,作用是为一种数据类型定义一个新名字,能够简化一些比较复杂的类型声明。
  2. 不论是C还是C++结构体的标准定义都是"struct Node{}"这种形式,区别在于后续定义变量的简洁性
  3. C语言中定义结构体若使用标准定义法,后续定义变量只能使用“struct node node1”这种形式,很不方便;因此,结合关键字typedef,在标准定义之后使用“typedef struct node Node;”或直接使用“typedef struct node{} Node;”定义后续定义结构体变量就能采用"Node node1"这种形式了,即Node等价为struct node,这样定义变量十分简洁。
  4. C++中采用结构体的标准定义"struct Node{};"这种形式定义变量可以直接使用Node node1这种形式;区别在于C++中的struct Node{} node1;”在定义结构体的同时定义的结构体变量node1,而不是结构体的等价形式,因此不能用node1来定义新变量。当然C++中也可以使用"struct {}node1;"的形式定义结构体变量,但是缺点在于后续无法定义新的结构体变量了。
  5. 之所以在C/C++中采用“typedef struct node *Node;”这种形式,主要是为了定义链表服务的,链表的定义:

1

2

4

5

6

7

typedef struct node* Node;

struct node

{

  ElementType Data;    //ElementType是自定义的数据类型

 

  Node Next;

};

 

   

或者

1

2

3

4

5

6

typedef struct node

{

  ElementType Data;

 

  struct node* Next;

} *Node;

 

 

你可能感兴趣的:(C++进阶)