之前写的一篇笔记:https://blog.csdn.net/qq_39883358/article/details/84654365
刚开始学*C语言*和*数据结构*的时候,不是很懂typedef 到底要干啥。也不是很懂结构体定义的名字到底是什么,现在就刚好一起来说说
参考书籍《C语言程序设计现代方法》
一、typedef
参考博客:https://blog.csdn.net/u014470361/article/details/79758548
我的理解是 typedef 就是rename,重命名。比如你的一个同学叫做,“禤靐龘(xuān bìng dá)”,那么你就可以用“喂”来替代。
例如:
目标:要声明两个整型的指针
易犯的错误:int * p1,p2;
只有p1是整型的指针,p2是一个整型变量。等价于:
int *p1; //这个*,挨着int也行,挨着p1也行,是等价的
int p2;
正确的格式:int *p1,*p2;
但是这样有点复杂,尤其是要定义的指针很多的时候,于是乎:
typedef int* Pointer;
Pointer p1,p2;
另外一个我们常见的例子就是在结构体(struct)当中,结构体的部分,在后面介绍
struct part{ //零件的编号、名字和现有数量
int number;
char name[NAME_LEN+1];// NAME_LE =25
int on_hand;
};
struct part p1,p2; (C++中可以省略struct,写成 ***part p1,p2;*** 但是C语言里面不行)
typedef struct part{
int number;
char name[NAME_LEN+1];
int on_hand;
}Tag;
Tag p1,p2;
二、结构体
结构体:最基本的只需要*** struct {·····}; ****
struct {
int number;
char name[NAME_LEN+1];
int on_hand;
} part1,part2;
类比于:
int part1,part2;
即把整个:| struct { | 看做 int
| int number; |
| char name[NAME_LEN+1]; |
| int on_hand; |
| } |
struct {·····} 指明了类型,part1、part2则是具有这种类型的变量。像是 int part1,part2;
结构标记——名字
struct part{
int number;
char name[NAME_LEN+1];
int on_hand;
};
声明了名为part的结构标记,再用结构标记来声明变量:
struct part part1,part2;
C++可省略struct
part part1,part2;
也可以——结构标记的声明和结构变量的声明合并在一起:
struct part{
int number;
char name[NAME_LEN+1];
int on_hand;
}part1,part2;
结构类型的定义:
typedef struct{
int number;
char name[NAME_LEN+1];
int on_hand;
}Part;
Part part1,part2;
类比于
typedef int* Pointer;
另外一种好的解释:
typedef struct Part { int number; char name[NAME_LEN+1]; int on_hand; }PartNew; typedef : 指的是重新定义结构体 struct Part : 将此类型的结构体命名成Part,即可以用Part来命名此结构体 PartNew: 是Part的别名,效果和Part一样,可以定义结构体 struct Part part1 *** Part part1 *** PartNew part1 三者等价
参考博文:https://blog.csdn.net/tonepig/article/details/70225685 (为了理解替换了原博文的内容,修改了格式)