typedef 的用法
来源:互联网 发布:清除数据恢复出厂英文 编辑:程序博客网 时间:2024/06/09 19:44
内容整理于以下两个链接:
http://wenda.so.com/q/1365893435069207?src=150
http://baike.so.com/doc/5401819-5639476.html
一作用
为现有类型创建一个新的名字,或称为类型别名;
二目的
在编程中使用typedef目的一般有两个,一个是给变量一个易记且意义明确的新名字,另一个是简化一些比较复杂的类型声明。
三识别typedef的方法:
a).第一步。使用已知的类型定义替代typdef后面的名称,直到只剩下一个名字不识别为正确
如typedef u32(*func)(u8);
从上面的定义中找到 typedef__u32 u32;typedef __u8 u8
继续找到 typedefunsigned int __u32;typedef unsigned char __u8;
替代位置名称 typedefunsigned int (*func)(void);
现在只有func属于未知。
b).第二步.未知名字为定义类型,类型为取出名称和typedef的所有部分,如上为
func等价于unsignedunsigned int (*)(unsigned char);
c).第三部.定义一个变量时,变量类型等价于把变量替代未知名字的位置所得到的类型
func f等价于unsignedunsigned int (*f)(unsigned char)
四常规用法
1.常规变量类型定义
例如:typedef unsignedchar uchar
描述:uchar等价于unsignedchar类型定义 uchar c声明等于unsigned char c声明
2.数组类型定义
例如: typedef intarray[2];
描述: array等价于 int[2]定义; array a声明等价于int a[2]声明
扩展: typedef intarray[M][N];
描述: array等价于 int[M][N]定义; array a声明等价于int a[M][N]声明
3.指针类型定义
例如: typedef int*pointer;
描述: pointer等价于 int*定义;pointer p声明等价于int *a声明
例如: typedef int*pointer[M];
描述:pointer等价于 int *[M]定义 pointer p声明等价于int *a[M]声明明
4.函数地址说明
描述:C把函数名字当做函数的首地址来对待,我们可以使用最简单的方法得到函数地址
例如:函数:int func(void); unsigned long funcAddr=(unsigned long)func, funcAddr的值是func函数的首地址
5.函数声明
例如:typedef int func(void); func等价于 int (void)类型函数
描述1: func f声明等价于 intf(void)声明,用于文件的函数声明
描述2: func *pf声明等价于int (*pf)(void)声明,用于函数指针的生命,见下一条
6.函数指针
例如: typedef int(*func)(void)
描述: func等价于int(*)(void)类型
func pf等价于int(*pf)(void)声明,pf是一个函数指针变量
7结构体
例如:
typedef structtagMyStruct
{
int iNum;
long lLength;
} MyStruct;
描述:MyStruct等价于 structtagMyStruct;
MyStructvarName ;相当于structtagMyStructvarName ;
五注意事项
1不可与auto、extern、mutable、static、register等关键字出现在同一个表达式中。
2在类型别名前使用const时要想起该名是一个类型,不是简单的字符串替换。 例如:typedef char * pStr;const pStr p2和const long x本质上没有区别,都是对变量进行只读限制;
六 typedef与#define的区别与各自的优势
1 define 只是简单的字符串替换,而typedef是定义一个类型别名。
2 define 定义中包含表达式,必须使用括号,typedef不需要;
3 define宏定义有一个特别的长处:可以使用 #ifdef ,#ifndef等来进行逻辑判断,还可以使用#undef来取消定义。
4 typedef也有一个特别的长处:它符合范围规则,使用typedef定义的变量类型其作用范围限制在所定义的函数或者文件内(取决于此变量定义的位置),而宏定义则没有这种特性。
- [typedef]typedef的高级用法
- typedef的用法
- typedef的用法
- 关于typedef的用法
- 关于typedef的用法
- 关于typedef的用法
- 关于typedef的用法
- 关于typedef的用法
- typedef 的用法
- 关于typedef的用法
- typedef的用法
- typedef的用法小结
- typedef 的用法
- typedef的用法
- typedef struct的用法
- typedef的用法
- typedef 的用法
- typedef的用法
- C#之你该知道的东西1.0
- linux c实现文件复制
- Class类的使用——课后总结
- 《JVM学习系列》二.HotSpot虚拟机对象解密
- Problem 50 Consecutive prime sum (线性筛)
- typedef 的用法
- c语言读写函数
- android Studio Lambda插件(gradle-retrolambda)安装
- 2. 使用Python 解释器
- 拉格朗日(Lagrange)插值曲线
- IOC控制反转手记
- unity 3d中如何创建公有共用的代码段或数据,让所有其他类或者脚本都能访问?(代码说明static 静态类的使用)
- linux c 获得本机时间date
- MYSQL分页limit速度太慢优化方法