1、typedef关键字的用法

typedef是C语言中的一个关健字,用于定义新的类型(或者类型的重命名)
C语言中的类型一共有两种:
一种是编译器定义的原生类型(基础数据类型,如 int、double之类的);
第二种是用户自定义类型,不是语言自带的,而是程序员自己定义的(如数组类型、结构体类型、函数类型等)。
我们今天讲的数组指针、指针数组、函数指针等都属于用户自定义类型。

有时候自定义类型太长了,用起来不方便,所以用typedef给它重命名一个简短的名字。只是类型的命名工。 所以typedef本身并不生产类型,只是负责给类型起一个好听的名字。就像农夫山泉说“我们并不生产水,我们只是大自然的搬运工”;在这里就是,我们并不生产类型,我们只是类型的命名工。
注意:typedef是给类型重命名,也就是说type得分加工出来的都市类型,而不是变量。这里要注意类型与变量的区别。类型本身并不占内存,她只是一个模具,而变量是这个类型的一个具体实例。如果用面向对象的思想来理解,则类型就是类,而变量就是对象。

2、轻松理解和应用typedef —

用最简单的话去诠释 typeder的作用,就是用于给类型取别名。但是,并没有你想象的那么简单!
typedef int size,那么 int 就有一个别名叫 size 了,以后 size 就和 int 这个类型是一样的用法了。
看到这里,如果你仅仅认为typedef就是把第一个参数(类型名)等同于第二个参数这么简单,那你就想的太简单了。
再来看看下面这个例子typedef char Line[81]中 Line[81] 就是 char 的别名吗?这显然不对。它真正的含义是Line类型代表了具有 81个先素的字符数组。那么 Line t 就等同于 char t[81]。看到这里读者是否晕了?我们尝试把它放在一起看看。

 typedef int size;   // typedef 行int  i; //原型行size    i; // 应用行
同理:  typedef char Line[81];  // typedef 行char    t[81]; // 原型行Line   t;     // 应用行

再举一个函数指针的例子,如下所示。

typedef int  (*fun_ptr)(int,int);    // typedef 行
int (*fp) (int,int);    // 原型行
fun_ptr   fp ;     //应用行 fp;

以上三个例子都有以下几个共同点。
首先,“typdef行”和“原型行”相比,“typdef行”仅仅多个typedef而已。就函数指针的例子来说,typedef行”和“原型行”的根本区别在于,fun_ptr是类的别名,fp是该类的变量。
其次,“原型行”和“应用行”的编译结果是一样的。就函数指针的例子来说,它们都是创建了一个类型为 int(*)(int,int)的函数指针。只是 fun_ptrp(应用行)比 int(*fp)(int.int)(原型行)这种形式更加简洁,便于书写和理解。形式越复杂,typede 的优势就越明显。

typedef 的定义应用和理解应该是一步到位的。

1、定义过程

只要我们能写出原型行,就能直接写出typedef行,因为形式上只差一个typedef。如我们写出原型:char t[81],那么加上一个typedef 就能得到我们想要的定义,当然也可以修改下类名,如 typedef char T[81]。

2、应用过程

“Tt”中,T是之前定义的类型,t是通过该类型定义的变量。

3、 理解过程

要想理解“Tt”,就要找到与之对应的“原型行”,但是“原型行”一般在程序中不会出现,所以只能先找到“typedef行”,在通过“typedef行”推导出“原型行”(推导的过程就是去掉typedef 而已)。

在“”的定义中,的typedef定义形式为typedef char T[81],因此T:就等价于 char[81];所以:

 typedet char T[81];T  t;

与直接 char t[81];是完全等价的。

小结

当我们看到一个typedef定义时,如typedef int (*fun_ptr)(inr,int)。我们的大脑里需要考虑两件事。
1、typedef 是给类型取别名,所以只要是typedef定义的东西都是类型。所以看到以上表达式就是要意识到fun_ptr是个类型。
2、要理解typedef到底定义了什么,首先去掉typedef,再将typedef定义的“类型”看成是“变量”。如将以上表达式就看成int (*X)(int,int),就能明白该表达式的目的是想定义一个函数的指针类型。

注意事项

typedef 在语法上是一个存储类的关键字(如auto,extern , static,register),而变量只能被一种存储类的关键字修饰。
如:

typedef static int a;   //错误示范

C语言 关键字 | typedef相关推荐

  1. C语言学习—联合体Union和关键字Typedef

    C语言学习-联合体Union和关键字Typedef 前言 1 联合体Union 1.1 Union认知 1.2 Union应用 2 关键字typedef 前言 内容主要为联合体Union和关键字Typ ...

  2. c语言 char转int_C语言关键字及进制的转换你都知道吗?

    ​前面我们讲过 C语言简洁.紧凑 使用方便.灵活 那是什么使得C语言这么方便呢? 那就是关键字,或称保留字 C语言的关键字共有32个 根据关键字的作用 可分为 数据类型关键字 控制语句关键字 存储类型 ...

  3. c语言字母表关键字,读书笔记-C语言关键字

    001 关键字 C语言一共32个关键字 1. 声明和定义 在开始认识关键字前,必须要明白什么是声明,什么事定义: 定义:(编译器)创建一个对象,为这个对象分配一段内存并给他取上一个名字.在一个作用域内 ...

  4. c语言getchar用法_C语言 — 关键字

    几十个关键字不多,用得多了自然会记住,相信大家也不会担心.下面是C语言中的 32 个关键字: 一丶C语言关键字 第一个关键字:auto 用来声明自动变量.可以显式的声明变量为自动变量.只要不是声明在所 ...

  5. 根据作用C语言关键字分为,C语言 关键字

    关键字就是已被C语言本身使用,不能作其它用途使用的字.例如关键字不能用作变量名.函数名等 由ANSI标准定义的C语言关键字共32个. 根据关键字的作用,可以将关键字分为数据类型关键字和流程控制关键字两 ...

  6. C语言关键字----Const

    C中CONST的使用: 虽然这听起来很简单,但实际上,const的使用也是c语言中一个比较微妙的地方,微妙在何处呢?请看下面几个问题. 问题:const变量 & 常量 为什么下面的例子在使用一 ...

  7. 水滴石穿C语言之typedef的问题

    1. 基本解释 typedef为C语言的关键字,作用是为一种数据类型定义一个新名字.这里的数据类型包括内部数据类型(int,char等)和自定义的数据类型(struct等). 在编程中使用typede ...

  8. 由ANSI标准定义的C语言关键字,C语言32个关键字详解

    C语言中32个关键字详解 由ANSI标准定义的C语言关键字共32个: auto double int struct break else long switch case enum register ...

  9. C语言中文字符索引,C语言关键字中英文对照索引

    C语言关键字中英文对照索引 一. C语言关键字对照 关键字,又称保留字,是C语言中已预先定义.具有特定含义的标识符. 注:C语言中共有32个关键字,所有关键字都用小写字母表示,且这些关键字不能用作用户 ...

  10. 什么是C语言的合法正确标识符?什么是C语言关键字?

    C语言标识符与关键字 一.C语言标识符 1.1 标识符的概念 1.2 C语言中合法的标识符有以下这些: 1.3 C语言中非法的标识符有以下这些: 1.4 标识符使用注意事项: 二.C语言关键字 2.1 ...

最新文章

  1. mysql 创建删除表_mysql创建删除表的实例详解
  2. Struts2 注解中跳转 action
  3. MySQL高级 - 案例 - 系统性能优化 - 读写分离概述
  4. vue resource then
  5. Redis高级数据结构原理解析-bitmap,hyperloglog
  6. 运维-替换-修改kibana徽标
  7. 作者:司恩哲(1985-),男,就职于中国人民银行征信中心数据部
  8. 使用MVC连接数据库及MVC应用的一般命名
  9. VC-SDK路报(预备知识与概念介绍)
  10. 微信小程序之语音识别(附小程序+服务器源码)
  11. (三)svn 服务器端之创建仓库
  12. accumulate
  13. echarts 生成 迁徙图_Echarts4+EchartsGL 3D迁徙图(附源码)
  14. 鬼压床到底是怎么回事?
  15. mbp使用brew安装unrar
  16. 我生命的意义和价值是什么
  17. Python 的文件定位
  18. Win10使用Geth搭建本地开发私有链(2021版)
  19. 改变tiff图片像素大小
  20. MySQL 怎么保证备份数据的一致性?

热门文章

  1. 关于ping是用的TCP还是UDP的争论
  2. iOS-登录,注册隐私政策,用户协议
  3. matlab画动态简单轨迹,利用MATLAB绘制相轨迹
  4. MATLAB SMRF点云滤波算法
  5. 用VB.net编写的Windows服务管理程序(堪称经典)全部源代码
  6. 安卓手表ADB实用工具箱
  7. mysql安装教程【安装版】
  8. C/C++教程 第十二章 —— MFC的基本使用
  9. 第一个十年,我从教师转行为web程序员,下一个十年呢?
  10. 在线Excel的前端组件、控件,实现web Excel