关于C语言中typedef struct和struct 的用法

简单易懂,非常详细!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就比较省事了。

转载请说明出处哦。

  • 35
    点赞
  • 58
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值