简单易懂,非常详细!C语言中typedef struct和struct 的用法
总有刚入门的工程师问我这个问题,于是就有了写这一篇文章的想法,我也不是什么大咖,只是一个普通的工程师,会尽量的描述的浅显易懂一点。
在此之前,我想先谈谈关于typedef和#define的区别,typedef和#define在C语言中的作用就是替换,只不过两个所替换的对象有区别罢了,我举两个例子,大家可能就会明白了。
#define N 100 //注意 没有; 分号
何谓替换?就是每当程序编译,遇见N时,就用100去替代N。就比如当程序编译
char name[N];
时,与
char name[100];
是等价的。
那么这么做的好处是什么呢?
给大家打个比方 #define N 555555555555555555555555555555
如果你需要用到555555555555555555555555555555这个数字,你觉得是用N省事呢,还是老老实实数有几个5,然后慢慢打省事呢?
好了,明白了#define,接下来我们说说typedef。
typedef拆开 就是type def,也就是 类型定义,作用和#define是一样的,只不过定义的对象是type,也就是类型。
何谓类型? 最常见的就是那些int char float之类的咯。所以我们接下来再看
typedef int AA
这条语句的意思是用AA去替代int。
所以我们可以这样
int a;
也可以这样
AA a;
只要你把AA看成int,那就OK了,那么为什么要用typedef呢? 好,接下来就是正文了!
咱们先来讲struct,关于struct网上资料很多,这里就不讲的很详细了,typedef struct和struct有区别的地方,我会提一提。
定义结构体的一般格式为:
struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构变量;
结构名和结构变量是有本质区别的,我就简单浅显的用个例子来说明下到底是何区别,这时候实例往往比苍白的语言更有说服力。
聪明的朋友看到这幅图的瞬间就应该明白两个之间的区别了,但我还是要讲解一下,打个不太恰当的比方。
结构体名,顾名思义,是把下面的这一串打包
{
char name[8];
int age;
char sex[5];
char depart[20];
}
取名叫做 aaaa。
struct和int、float一样,都是用于定义变量的类型,但是根据结构体里面包含的内容不同,比如上述例子中有name/age/sex/depart,所以结构体变量的类型可以有无数种,而不是像上述定义age一样,用个int就行了。
所以当我们要用到结构体定义一个变量时,
不是
struct person2;
而是和例子里的一样
struct aaaa person2;
多了个aaaa,aaaa表达的意思就是内容包含name/age/sex/depart的结构体。
好,接下来讲结构变量,结构变量就是变量嘛,定义后就不用再次声明,也就是直接省去下面这一段代码
struct aaaa person1;
直接就拿过来使用了,省去声明的那一步。
所以这也是为什么有些结构体定义省去结构名,直接变成
struct
{
char name[8];
int age;
char sex[5];
char depart[20];
} person1;
结构体名和结构体变量都可以省略,但只能省略其一,要不然你怎么定义呢?
struct说完了,那么就一起来看看typedef struct,接下来放例子,看看不同之处。
typedef struct 结构名
{
类型 变量名;
类型 变量名;
...
} 结构别名;
注意!! 区别来了,这里是结构别名而不是结构体变量了!!
同样的,这里的结构体名和结构别名也是可以省略的,但也只能省略一个!
也就是可以这样来定义一个结构体
person aaa;
或者。
struct aaaa aa;
那么有的人就疑惑了,这样为什么用typedef struct?直接用struct里的结构变量定义不就完事了?还省去声明。
其实是这样的,有时候你刚开始想用这个结构体但你不知道又需要建立多少个变量,这时候使用typedef struct就比较省事了。
转载请说明出处哦。
今天的文章关于C语言中typedef struct和struct 的用法分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/31471.html