typedef是类型定义的意思。
typedef struct 是为了使用这个结构体方便。
具体区别在于:
(1)若struct node { }这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;
(2)若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;
区别就在于使用时,是否可以省去struct这个关键字。
struct 结构名 {
…类型 变量名;
…类型 变量名;
… }结构变量; // 这里是变量
typedefstruct 结构名 {
…类型 变量名;
…类型 变量名;
… }结构别名;
节点的构造:
typedef struct Node
{
int data; //数据域,用来存放数据域;
struct Node *pNext; //定义一个结构体指针,指向下一次个与当前节点数据类型相同的节点
}NODE,*PNODE;
int main()
{
//struct Node stu1;
NODE stu1;
//struct Node *a;
PNODE a = &stu1;
}
对节点构造的理解:
1、struct Node{ }:定义了一种数据类型叫struct Node;
2、struct Node{ }NODE:给struct Node类型起别名叫NODE类型;
3、struct Node{ }*PNODE:
(3.1)、定义了一种指针类型struct Node{ }*;
(3.2)、把指针类型struct Node{ }*取别名叫PNODE(同样表示一种指针类型,但不是变量!);
(3.3)、后期使用别名定义指针变量 PNODE a = &stu1,等同于struct Node{ } * a = &stu1;
(3.4)、如果没有给指针类型取别名,只定义了struct Node{ }NODE, 不能指直接 PNODE a = &stu1,在定义结构体指针变量时要写成:
struct Node*a = &stu1;
或者
NODE*a = &stu1
.
.
.
.
补充内容:在C++中这是一个风格问题。
typedef struct {
… .//content
} SA,*SpA;
如果typedef成SA时,在定义struct对象指针的时候可以写成:
SA *pParam;
如果typedef成*SpA时,在定义struct对象指针的时候可以写成:
SpA pParam; //也就是SA* pParam;
别看SA *pParam和SA* pParam一样,只是“*”号位置换了一下,虽然说只是风格问题,但在实际理解上是有区别的!
“*”号紧挨着变量名之前(SA *pParam)标识定义的是一个struct变量的指针,此时也就是上述typedef成SA的原因;
“*”号紧挨着类型名之后(SA* pParam)表示定义的是一个struct指针的变量,此时也就是上述typedef成*SpA。
本文详细解析了在C语言中typedef与直接使用struct定义结构体的区别,主要体现在使用时是否需要struct关键字。同时,通过示例解释了typedef如何为结构体类型和指针类型创建别名,并在代码中展示了如何使用这些别名定义变量。最后,讨论了在C++中typedef的不同风格选择对指针定义的影响。
809

被折叠的 条评论
为什么被折叠?



