【程序设计】typedef用法总结
2014-04-30 01:26
253 查看
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.用来定义一个通用的函数(指针)类
上面的代码演示的输出如下:
f1
f1
f2
f2
可见,无论是定义一个函数类或者函数类指针,他所实现的结果是一样的。具体可见注释。
本人由Cout_Sev 原创编写,部分资料参考网络及课本,转载注明出处。
谢谢!
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 原创编写,部分资料参考网络及课本,转载注明出处。
谢谢!
相关文章推荐
- [c++学习]关于typedef的用法总结
- 关于typedef的用法总结
- 【总结】C语言中typedef语句用法
- 关于typedef的用法总结
- 关于typedef的用法总结
- js高级程序设计(第三版)总结--函数的详解及return的用法
- typedef的用法总结
- 关于typedef的用法总结
- typedef用法总结
- 关于typedef的用法总结
- 关于typedef的用法总结
- 关于typedef的用法总结
- 关于typedef的用法总结
- 关于typedef的用法总结
- 关于typedef的用法总结
- typedef struct用法总结_20150827
- 关于typedef的一些用法总结 .
- typedef用法总结
- c++基础 之 typedef 用法总结
- 关于typedef的用法总结