2021-08-21 对typedef结构体指针取别名的理解

本文详细解析了在C语言中typedef与直接使用struct定义结构体的区别,主要体现在使用时是否需要struct关键字。同时,通过示例解释了typedef如何为结构体类型和指针类型创建别名,并在代码中展示了如何使用这些别名定义变量。最后,讨论了在C++中typedef的不同风格选择对指针定义的影响。

typedef是类型定义的意思。

typedef struct 是为了使用这个结构体方便。
具体区别在于:
(1)若struct node { }这样来定义结构体的话。在申请node 的变量时,需要这样写,struct node n;
(2)若用typedef,可以这样写,typedef struct node{}NODE; 。在申请变量时就可以这样写,NODE n;

区别就在于使用时,是否可以省去struct这个关键字。

struct 结构名 {
…类型 变量名;
…类型 变量名;
… } 结构变量; // 这里是变量

typedef struct 结构名 {
…类型 变量名;
…类型 变量名;
… } 结构别名;

节点的构造:

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 *pParamSA* pParam一样,只是“*”号位置换了一下,虽然说只是风格问题,但在实际理解上是有区别的!
  “*”号紧挨着变量名之前(SA *pParam)标识定义的是一个struct变量的指针,此时也就是上述typedef成SA的原因;
  “*”号紧挨着类型名之后(SA* pParam)表示定义的是一个struct指针的变量,此时也就是上述typedef成*SpA

评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大大枫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值