【程序设计】typedef用法总结
来源:互联网 发布:iphone与mac蓝牙连接 编辑:程序博客网 时间:2024/06/05 16:39
typedef一共有以下几种用法:
1.定义一个类型的新名字。
很多人自然而然的会联想到define,就在这里一块说说typedef的类型重命名与define的类型重命名的区别。
当我们在程序中敲入以下代码时实现的是什么功能:
char *a,b;
有时候我们可能希望通过上面代码实现(情况1):
char *a;
char *b;
但不如愿的是上面的代码实际上实现的是(情况2):
char *a;
char b;//b是一个char类型,不是char指针类型
但是,当我们使用了
typedef char* Pchar;
Pchar a,b;
此时我们实现的,正是上面情况1的情况.因为typedef是有类型识别的,他已经认定了Pchar是char*类型的了;
但当我们使用了
#define Pchar char*;
Pchar a,b;
此时实现的,正是char* a,b;所实现的功能(情况2),原因很简单,#define是编译前的预处理操作,直接将代码里的所有Pchar 字符段转换为 char*,这也就不难理解为什么跟char* a,b;一个情况了.
再看另外一个例子:
typedef char * pStr;
char string[4] = "abc";
const char *p1 = string;
const pStr p2 = string;
p1++;
p2++;
上图的代码执行到p2++的时候发生错误。
因为在const char *p1中,const限制的是p1所指向的内容不可改变。即const限制了*p1;
但是const pStr p2中,const限制的是p2本身的内容不可改变。不管你是什么类型的,const只看到一个变量p2;
2 用typedef来定义与平台无关的类型。
比如定义一个叫 REAL 的浮点类型,在目标平台一上,让它表示最高精度的类型为:
typedef long double REAL;
在不支持 long double 的平台二上,改为:
typedef double REAL;
在连 double 都不支持的平台三上,改为:
typedef float REAL;
这样,当我们跨平台修改代码时,只需要改下 typedef 本身就行,不用对其他源码做任何修改。
这大大提高了我们代码的可重用性
3.用来定义一个通用的函数(指针)类
#include<stdio.h>typedef void (A)(void); //定义了一个返回值为void,变量也为void的所有函数的一个类typedef void (*pA)(void);//定义了一个返回值为void,变量也为void的所有函数的一个类指针void f1(){printf("f1\n");}void f2(){printf("f2\n");};int main(){A *a;//定义一个指向A类型的指针,其实a就是pA类的一个实例pA pa;//定义一个指向A类型的指针a = f1;pa = f1;//可以把f1默认为A*或pA类型的一个实例,所以当f1赋值给a、pa的时候都是直接赋值a();pa();a = f2;pa = f2;a();pa();return 0;}
上面的代码演示的输出如下:
f1
f1
f2
f2
可见,无论是定义一个函数类或者函数类指针,他所实现的结果是一样的。具体可见注释。
本人由Cout_Sev 原创编写,部分资料参考网络及课本,转载注明出处。
谢谢!
- 【程序设计】typedef用法总结
- typedef用法总结
- typedef用法总结
- typedef用法总结!很棒!!!
- typedef用法总结
- typedef的用法总结
- typedef用法总结
- Typedef用法总结
- typedef用法总结
- typedef的用法总结
- Typedef 用法总结
- typedef用法总结
- typedef用法总结
- typedef用法总结
- typedef用法总结
- typedef的用法总结
- typedef用法总结
- 总结typedef用法
- HDU 1728 逃离迷宫
- 笨笨熊搬家打包篇
- 2013 duilib入门简明教程 -- 界面布局(9)
- 应用InterlliJ配置Maven 初学问题笔记
- Unity 3D,开发mobile,android初学者入门,环境搭建
- 【程序设计】typedef用法总结
- Spring事务传播机制解惑
- JSP/Servlet 获取真实IP地址
- 有趣的动态规划入门教程
- MySQL-1-安装
- opencv中cvmat的通道学习
- 2013 duilib入门简明教程 -- 界面设计器 DuiDesigner (10)
- Unity与android开发——一款神奇的工具
- windows7 64位 mini2440开发板 USB驱动安装