typedef 、结构体、结构体struct命名到底要干啥

之前写的一篇笔记: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   (为了理解替换了原博文的内容,修改了格式)

猜你喜欢

转载自blog.csdn.net/qq_39883358/article/details/88576634