typedef为C语言的关键字,作用是为一种数据类型定义一个新名字,这里的数据类型包括内部数据类型【int,char等】和自定义的数据类型【stuct等】。

typedef是C/C++常用语法,typedef作用,归结起来,可以分为四种:

1、定义一种类型名

常规的应用中,想要定义两个字符指针,写下如下代码: char *a, b

(1)char* a,b;

(2)char c='m';

(3)a=&c;

(4)b=&c;

上述代码是错误的,只有a为字符指针,b仍旧为字符变量。通过#define进行宏定义,仍然是无效的,因为宏定义仅仅是字符替换。

以下则可行:

(1)typedef char* PCHAR;

(2)PCHAR pa, pb;

2、跨平台移植

程序编写中,如果考虑到平台移植的因素,则需要从代码中抽象出硬件层的差异,例如,变量所占空间,端模式等等。

考虑一个浮点型变量,在不同的硬件平台上,所占据的空间有可能不同,此时,可以采用typedef将其定义到单独的头文件内,该头文件是纯粹抽象硬件相关的内容:

(1)typedef float REAL;

(2)typedef short int INT16;

(3)typedef int INT32

(4)...

这样的话,如果将来考虑到程序的移植,只需要修改该头文件即可。

3、为复杂的声明取别名

复杂的声明形如:void (*b[10]) (void (*)());

意思:首先*b[10]为指针数组,它里面的十个元素全是指针。到底是什么指针呢,是一个返回类型为空,形参为空的函数指针。

这种复杂的声明,可以用typedef进行简化:

首先:声明后面的函数指针:

(1)typedef void (pFunParam *)();

接着声明前面的指针数组:

(1)typedef void (*pFunx)(pFunParam);

原声明的最简化版:

pFunx b[10];

本文档在撰写过程中,参考了网络博客typedef用法

里面提到一个复杂的声明:

(1)doube(*)() (*e)[9];

而然这个声明在gcc下编译时不通过的,按照作者的本意,似乎应该这样声明:

(1)double (*(*e)[9])();

e是一个指向9维数组的指针,数组内为函数指针,该函数指针形参为空,返回类型为double。

这样的话,应该采用这样的typedef来简化声明:

typedef (*(*ptr)[9])();

推荐教程: 《c语言教程》

更多相关文章

  1. 手把手教你C#中指针的使用方法
  2. 声明动态数组的语句怎么写
  3. c语言函数声明格式是什么?
  4. c语言函数声明格式
  5. 变量的指针是指该变量的什么
  6. 引用和指针有什么区别
  7. c语言指针用法有哪些
  8. C语言中的指针有什么作用
  9. c++引用和指针的区别是什么?

随机推荐

  1. 客户端用不着的数据结构之并查集
  2. 最小堆的魅力!思路清晰求解「至少需要多少
  3. 五分钟小知识:布隆过滤器原理和应用分析
  4. 炫酷!用Python制作漂亮的流动桑基图
  5. Java 包(学习 Java 编程语言 035)
  6. 经典算法题:排序算法
  7. 初识广度优先搜索与解题套路
  8. 二分查找法:在女朋友回家之前可以玩多少个
  9. 从一道简单算法题理解快速排序的 partiti
  10. MVVM框架下实现分页功能