typedef 详解
typedef,看名称,就是类型定义,它,真的就用在类型定义。
它创建一种新的数据类型名称。
注意,是数据类型名称,不是数据类型。
也就是说,typedef并不创建新的类型,typedef只是在已有数据类型(比如 int,char等)上,给这个已有类型起一个别名。
typedef 应用场景:
1. 变量:
typedef int Length; // 给int数据类型创建一个名称,叫Length;
Length len, maxlen; // 可以用Length代替int,声明变量,声明的变量,数据类型就是int.
// 这个声明,等同于 int len, maxlen;
2. 指针:
typedef char *String; // 给char *这个指针类型创建一个名称,叫String
String rich = "I am a rich man!"; // 等同于 char *rich = "I am a rich man!";
3. 结构体:
// 包含结构体stRect声明,
// 和typedef结构体类型stRect一个新的名称 Rect
typedef struct stRect
{
int x;
int y;
int width;
int height;
}Rect;
Rect size; // 等同于struct stRect size;
或者
struct stRect
{
int x;
int y;
int width;
int heigth;
}; // 先声明一个结构体
typedef sturct stRect Rect; // 再用typedef生成一个名称 Rect;
Rect size; // 等同于 struct stRect size;
4. 函数指针。
关于函数指针的细节,请参照《指针函数和函数指针深入剖析》
void (*pf1)(int);
void (*pf2)(int);
void (*pf3)(int);
声明三个函数指针,
这三个函数指针可以用来指向一个无返回值(void),有一个int参数的函数;
每次声明函数指针,都差不多要跟声明函数原型一样了,敲这个多字符,好累好烦怎么办?
typedef void (*pFUNC)(int); // 给"无返回值,有一个int参数的函数指针"类型生成一个新名称,叫pFUNC;
pFUNC pf1, pf2, pf3, pf4; // 比 void (*pf1)(int)..这种轻松多了吧?
或者
typedef void FUNC(int); // 给"无返回值,有一个int参数的函数"类型生成一个新名称,叫FUNC;
FUNC *pf1. *pf2. *pf3, *pf4; // 既然类型是 FUNC,那指针,便是 FUNC *;
TIPS:
typedef 能否用 #define 来代替?比如 typedef int Length,可否替换成 #define Length int?
某些应用场合上是可以的,比如 typedef int Length,替换成 #define Length int,完全没有问题;
但它俩是完全不同的概念
#define 是预处理指令,只是简单地做字符串替换,不做类型检查;
#define Length int在预处理时把相关的Length字符串替换成int;
#define Length intxxxxxaabb,不进行变量声明(Length aa),编译也是能通过的。
typedef 是关键字,在编译时处理,做类型检查。
typedef int Length后,Length 就是一种类型,这种类型跟int一样。
typedef intxxxaaaba Length,不管进不进行变量声明,是无法通过编译的。
typedef 的作用:
1. 提高程序的可移植性,方便程序在不同平台上移植。
比如,定义一个变量,其值范围是0~0xABCDEF13;
在 32 位机上开发程序时,使用 unsigned int var(32位机unsigned int是32位,范围0~0xFFFFFFFF) ,符合!如果要把写好的程序移植到 16 位机上时,unsigned int var长度是16位,范围0~65535,不符合,怎么办呢?
如果不使用typedef,就需要把程序里所有用unsigned int 声明的变量,全部变成 unsigned long。
如果使用 typedef,只需要 typedef unsigned int DWORD;在声明变量时,使用 WORD var;如果需要把程序移植到16位机上时,只需要更改一个 typedef unsigned long DWORD 就行了。
2. 提高程序的可读性
为变量或者结构体,创建一个看起来一目了然的类型名称,让人一眼就知道这个类型是做什么的。
typedef 详解相关推荐
- C语言之typedef详解
2019独角兽企业重金招聘Python工程师标准>>> typedef可以看作type define的缩写,顾名思义就是类型定义,也就是说它只是给已有的类型重新定义了一个方便使用的别 ...
- c/c++中typedef详解(此文对typedef用于结构体的定义说明得很清楚到位)
1. typedef 最简单使用 [c-sharp] view plain copy typedef long byte_4; // 给已知数据类型long起个新名字,叫byte_4 你可以在任何需要 ...
- typedef的用法,C语言typedef详解
注意,转载至c语言中文网,因为转了人家的东西,广告我就不删了. C语言中文网推出辅导班啦,包括「C语言辅导班.C++辅导班.算法/数据结构辅导班」,全部都是一对一教学:一对一辅导 + 一对一答疑 + ...
- C语言typedef详解
原文:https://blog.csdn.net/CHENYUFENG1991/article/details/50680876 在C还是C++代码中,typedef都使用的很多.typedef与#d ...
- c枚举类型enum例题_C语言--enum,typedef enum 枚举类型详解
原文:http://z515256164.blog.163.com/blog/static/32443029201192182854300/ 有改动 C语言详解 - 枚举类型 注:以下全部代码的执行环 ...
- typedef 数组使用详解
typedef到处都是,但是能够真正懂得typedef使用的不算太多.对于初学者而言,看别人的源码时对到处充斥的typedef往往不知所错,而参考书又很少,所以在此给出一个源码,供大家参考. 懂得这些 ...
- C语言高频率--typedef和const用法详解
一.typedef用法详解 C语言允许为一个数据类型起一个新的别名,就像给人起"绰号"一样. 起别名的目的不是为了提高程序运行效率,而是为了编码方便.例如有一个结构体的名字是 st ...
- 【C语言】结构体定义 typedef struct 用法详解和用法小结
结构体定义 typedef struct 用法详解和用法小结 文章目录 结构体定义 typedef struct 用法详解和用法小结 0. 前言 1. 首先:在C中定义一个结构体类型要用typedef ...
- ORB-SLAM2代码/流程详解
ORB-SLAM2代码详解 文章目录 ORB-SLAM2代码详解 1. ORB-SLAM2代码详解01_ORB-SLAM2代码运行流程 1 运行官方Demo 1.2. 阅读代码之前你应该知道的事情 1 ...
最新文章
- dede 后台 mysql_织梦dedecms使用Mysql8.0无法登录后台的解决办法
- 独家 | ​多项式回归:从零开始学习梯度下降
- Linux内存管理原理【转】
- Docker创建 tomcat/weblogic 集群
- 二叉树的四种遍历方式(递归和非递归双重实现)
- [css] css图片缩放失真出现锯齿的如何解决呢?
- oracle安装后开机很慢,Windows下安装Oracle拖慢开机速度的解决方法
- Windows RDP远程桌面无密码账户
- java jxl poi_「excle下载」java实现下载excle(jxl、poi 两种方式) - seo实验室
- Netty工作笔记0049---阶段内容梳理
- 雪饮者 决策树系列(二)决策树应用
- 轻量级 js取色器 JSColor
- Vb与数据库学习总结博客
- ColorPix——到目前为止最好用的屏幕取色器
- Android实现中英文切换
- 体系结构实验(4)—— Tomasulo算法
- linux中的网络指令ssh ifconfig netstat telnet curl scp
- springMVC源码之组件介绍
- Interproscan linux版本详细安装教程及运行报错解决方案
- 原版蓝光光盘加国语配音加中文字幕及解说字幕保留弹出菜单傻瓜版教程
热门文章
- 邛海凌波,泛语于诗冒水来
- 【debug】ubuntu搜狗输入法 “http://ppa.launchpad.net/fcitx-team/nightly/ubuntu bionic Release” 没有 Release文件
- android 耳机按钮控制音乐播放
- (1W预算、1K预算)深度学习电脑选配、组装记录
- CentOS 升级内核
- Java拼图小游戏总结
- CPU/内存/缓存行/Disruptor
- html5图片怎么打包,webpack打包图片
- 编写测试用例的七种方法
- 微信/QQ中打开链接提示浏览器中打开遮罩