因为我是从C++入门的,对于C语言中很多知识不是很了解,所以经常会遇到在C++中没见过的表达形式,在这里记录一下学习历程,同时也希望能够帮助到后来者。关于typedef struct 和 struct 的区分网上有很多,但是都说得错综复杂,感觉没有get到正确的点。通过资料的整理,我认为它们之间的区分只需要记住下面几点即可:
- typedef是C语言中的关键字,作用是为一种数据类型定义一个新名字,能够简化一些比较复杂的类型声明。
- 不论是C还是C++结构体的标准定义都是"struct Node{}"这种形式,区别在于后续定义变量的简洁性
- 在C语言中定义结构体若使用标准定义法,后续定义变量只能使用“struct node node1”这种形式,很不方便;因此,结合关键字typedef,在标准定义之后使用“typedef struct node Node;”或直接使用“typedef struct node{} Node;”定义,后续定义结构体变量就能采用"Node node1"这种形式了,即Node等价为struct node,这样定义变量十分简洁。
- C++中采用结构体的标准定义"struct Node{};"这种形式,定义变量可以直接使用Node node1这种形式;区别在于C++中的“struct Node{} node1;”是在定义结构体的同时定义的结构体变量node1,而不是结构体的等价形式,因此不能用node1来定义新变量。当然C++中也可以使用"struct {}node1;"的形式定义结构体变量,但是缺点在于后续无法定义新的结构体变量了。
- 之所以在C/C++中采用“typedef struct node *Node;”这种形式,主要是为了定义链表服务的,链表的定义:
1 2 3 4 5 6 7 |
|
或者:
1 2 3 4 5 6 |
|