typedef 的讲解与应用实例

  •   前言:我们学过C语言的人都应该听过,或者说学过,甚至说用过typedef,多多少少都对其有所了解。不过就算没听过也没关系,我们一起来探讨一下。
  •   阐述:typedef 是英文 Type Define 的缩写,中文就是类型定义。在计算机编程语言中用来为复杂的声明定义简单的别名,它本身是一种存储类的关键字,与auto、extern、mutable、static、register等关键字不能出现在同一个表达式中。
  • typedef与define的差异:#define在预编译中,只是做简单的完全替换不会做错误检查,不管三七二十一,只会完全替换,例如:#define PI 3.1415926535 你写成3.L415926535,傻傻的编译器还是会把它代入引用的位置。而typedef unsigned int u16;
/*用法一:类型的重定义*/
typedef unsigned char u8;
typedef char * PCHAR;
......

这里的第一句是给unsigned char类型重新起个别名,叫 u8  应用时看到u8 定义的变量,就相当于unsigned char 类型,两者是完全等价的。同理第二句是给char *

起了个别名PCHAR ,即 PCHAR 类型代表着指向字符串类型的指针。

1 /*用法二:与结构体结合使用*/
2 typedef struct tagMyStruct
3 {
4     int iNum;
5
6     long lLength;
7
8 }MyStruct;

这个代码实际上相当于进行了两个操作:

第一声明了一个结构体名为   tagMyStruct

tagMyStruct称为“tag”,即“标签”,实际上是一个临时名字,struct 关键字和 tagMyStruct一起,构成了这个结构类型,不论是否有typedef,这个结构都存在。

我们可以用struct tagMyStruct varName来定义变量,但要注意,使用tagMyStruct varName来定义变量是不对的,因为struct 和tagMyStruct合在一起才能表示一

个结构类型。
1 struct tagMyStruct
2 {
3
4     int iNum;
5
6     long lLength;
7
8 };

第二给该结构体起了个别名叫 MyStruct

1 typedef struct tagMyStruct MyStruct;

因此,MyStruct实际上相当于struct tagMyStruct,我们可以使用MyStruct varName来定义变量。

当然,我们有时还会看到如下定义:

typedef struct student
{char name[N];int age;char * sex;
}std,*pt;

这时是不是感觉有点奇怪,究竟std是结构体的别名,还是*pt是结构体的别名呢?这就是我今天要讲的重点。

上面的代码相当于执行了三步操作:

第一步:定义结构体

 struct student
{char name[N];int age;char * sex;
}std;

第二步:给结构体重命名

typedef struct student std;

第三步:给结构体指针类型重命名

typedef student struct * pt;

这时,我们可以用pt来声明结构体指针类型的变量了,不用再写 struct student * kk;  直接写  pt kk;  简单明了。

下面给个简单的实例:

 1 /*
 2 *                程序名称:typedef 的简单实例
 3 *
 4 *                                    Veis声明。
 5 */
 6 #include <stdio.h>
 7 #include <string.h>
 8 #define N 20
 9 typedef struct student
10 {
11     char name[N];
12     int age;
13     char * sex;
14 }std,*pt;                /*这里的 pt 相当于一个 struct student * 类型;而 std 则是给结构体student起的别名*/
15 void main()
16 {
17     /*变量声明*/
18     pt p;                    /*语句    struct student * p;   与语句  pt p;  等价*/
19     std st1;
20
21     /*变量初始化*/
22     strcpy(st1.name,"alen");
23     st1.age = 15;
24     st1.sex = "male";
25     p = &st1;
26
27     /*打印输出*/
28     printf("\t\t\tStudent's  Informations\nname:%s\nage:%d\nsex:%s\n\n",p->name,p->age,p->sex);
29 }

PS:心动不如行动,看完自己尝试去写,只有去写去思考,你才能更好的理解和掌握一种东西。

本文作者能力有限,若本文有什么讲错的地方欢迎指出,共同进步。-----------------Veis

转载于:https://www.cnblogs.com/veis/p/7127784.html

C语言中的typedef相关推荐

  1. c语言中的typedef struct相当于java的一个类?,C ++中'struct'和'typedef struct'之间的区别?...

    在C ++中,之间有什么区别: struct Foo { ... }; 和 typedef struct { ... } Foo; #1楼 您不能对typedef结构使用forward声明. stru ...

  2. C语言中的typedef struct用法

    在学习数据结构的时候,我经常遇到typedef struct,刚开始感觉很别扭,查阅资料之后才真真理解了. 先从结构体说起. 1.结构体用法 struct Student{ int age; char ...

  3. C语言中struct typedef 以及结构体指针用法

    struct .typedef以及结构体指针用法 typedef用法 结构体指针用法 结构体初始化   typedef是类型定义的意思.typedef struct 是为了使用这个结构体方便.具体区别 ...

  4. c语言eof不起作用,c语言中EOF的用法

    c语言中EOF的用法以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c语言中EOF的用法 1.EOF是end of fi ...

  5. c语言typedef怎么自定义函数,c语言中typedef的用法

    C语言是一门通用计算机编程语言,应用广泛.C语言的设计目标是提供一种能以简易的方式编译.处理低级存储器.产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言. 尽管C语言提供了许多低级处理的功 ...

  6. C语言中typedf函数的用法,C语言中typedef用法详解

    在C语言中,经常有如下的用法: typedef struct  tag{    ...} MyType, *MyPtr; 一旦通过如上定以后,就可以用MyType来定义struct tag结构了. 以 ...

  7. c语言typedef的用法,C语言中typedef用法总结,看完就能像编程老手一样熟练运用...

    请看下文 C语言中typedef关键字应用比较常见,许多C语言初学者对它的用法不甚了解.事实上,我们可以用typedef来定义自己习惯使用的数据类型名称,可以替代自己所熟悉的基本类型.数组类型.指针类 ...

  8. c语言中struct和c++中class实例对比

    前言 实现游戏中简单的打怪升级的功能 c语言中的struct #include <stdio.h>typedef void(*Train)(struct player*, int); ty ...

  9. C++和C语言中enum 如何使用

    c++语言中enum类型的用法 枚举类型,顾名思义,"枚"作为量词,作"个"讲,那么枚举,就是一个一个的列举,如果一件事情能够被一个一个的列举,那么它的数量肯定 ...

最新文章

  1. JavaScript 关闭窗口事件
  2. 【算法导论】插入排序
  3. javaone_JavaOne和OOW 2015总结
  4. django:资源网站汇总
  5. php post json请求参数传递_php post json参数的传递和接收处理方法
  6. Linux信号实践(1) --Linux信号编程概述
  7. 在微信上如何查看2个人之间所有的红包转账记录,请注意是所有的?
  8. 微信授权,重定向两次
  9. SQL Server2005的XML数据类型之基础篇 (4)
  10. 多线程有几种实现方法_Java多线程实现有哪几种方法?
  11. 转行软件测试,简历怎么包装成1年工作经验的测试工程师
  12. Metasploit利用vnc图形化远程控制工具获得靶机远程控制桌面
  13. 自同步如果服务器删掉文件,linux服务器上ftp删掉的文件能找回
  14. Android端百度地图API使用详解
  15. 计算机自动开机关机设置在哪里设置密码,怎样设置开关机密码
  16. APK加固(梆梆助手)
  17. 《财富》公布40岁以下美国富豪榜 戴尔居榜首 [我在IT meets Coupon里提到的两个均在其列]...
  18. python sklearn svm_文本分类和预测 sklearn.svm.LinearSVC(1)
  19. Oracle日期加3天 加月 加年 上一月(MySQL获取上一月 上个月) 上一日 上一天 日期加一天
  20. 微信小程序周报(第二期)

热门文章

  1. 美团技术面1小时,我看出了和月薪3w的差距
  2. ELK 性能优化实践
  3. 阿里面试: 说说强引用、软引用、弱引用、虚引用吧
  4. CAS、原子操作类的应用与浅析及Java8对其的优化
  5. Spring中的18个注解,你会几个?
  6. 『浅入浅出』MySQL 和 InnoDB
  7. 最高10万奖励!不限选题!高通AI应用创新大赛应用赛道详解
  8. 兰大本科生发31篇论文遭质疑,本人及校方回应!
  9. Sci-Hub十岁生日解封,超233万新论文被放出!总数达到近8800万
  10. 如何使用Transformer来做物体检测?