C语言中typedef的用法
可以用typedef指定新的类型名来代替已有的类型名。
1.简单地用一个新的类型名代替原有的类型名;
typedef int Integer;
typedef float Real;
2.命名一个简单的类型名代替复杂的类型表示方法;
2.1 命名一个新的类型名代替结构体类型
typedef struct
{ int month;
int day;
int year;
} Date;
Date birthday; //定义结构体类型变量birthday
2.2 命名一个新的类型名代替数组类型
typedef int Num[100];//声明Num为整型数组类型名
Num a;
2.3 命名一个新的类型名代替指针类型
typedef char * String; //声明String为字符指针类型
String p, s[10]; //定义p为字符指针类型变量,s为字符指针数组
2.4 命名一个新的类型名代表指向函数的指针类型
typedef int (*Pointer)(); //声明Pointer为指向函数的指针类型,该函数返回整型值
Pointer p1, p2;//p1,p2为Pointer类型的指针变量
归纳起来,声明一个新的类型名的方法是:
2.4.1 先按定义变量的方法写出定义体(int i);
2.4.2 将变量名换成新类型名(将i换成Count);
2.4.3 在最前面加typedef(typedef int Count);
2.4.4 然后可以用新类型名去定义变量;
习惯上,常把用typedef声明的类型名的第一个字母用大写表示,以便与系统提供的标准类型相区别。
2.4.5.1 以上的方法实际上是为特定类型指定了一个同义字;
typedef int (*Pointer)();//Pointer是int(*)()的同义词,代表指向函数的指针类型,函数值为整型
2.4.5.2 用typedef只是对已经存在的类型指定一个新的类型名,而没有创造新的类型。
2.4.5.3 用typedef声明数组类型,指针类型,结构体类型,共用体类型,枚举类型等,使得变成更加方便;
int a[10], b[10];//原来
typedef int Arr[10];//
Arr a, b, c, d;
2.4.5.4 typedef与define表面上游相似之处;
#define是在预编译时处理的,它只能作简单的字符替换,而typedef是在编译阶段处理的。实际上它并不是作简单的字符串替换。
typedef int Num[10];
Num a;
并不是用Num[10]去代替int,而是采用如同定义变量的方法那样先生成一个类型名,然后用它定义变量。
2.4.5.5 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include指令把它们包含到文件中。这样编程者就不需要在各文件中中自己定义typedef名称了。
2.4.5.6 使用typedef名称有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。
浙公网安备 33010602011771号