Typedef
(1) 为特定的类型指定了一个同义字(synonyms)。例如
①typedef int Num[100];
Num a; Num是int [100]的同义词
②typedef int (*Pointer)();
Pointer p1; Pointer是int (*)()的同义词
(2) 用typedef只是对已经存在的类型指定一个新的类型名,而没有创造新的类型。
(3)用tyoedef声明数组类型、指针类型,结构体类型、共用体类型、枚举类型等,使得编程更加方便。
(4) 当不同源文件中用到同一类型数据时,常用typedef声明一些数据类型。可以把所有的typedef名称声明单独放在一个头文件中,然后在需要用到它们的文件中用#include指令把它们包含到文件中。这样编程者就不需要在各文件中自己定义typefef名称了。
(5) 使用typedef名称有利于程序的通用与移植。有时程序会依赖于硬件特性,用typedef类型就便于移植。
#include <stdio.h> #include <stdlib.h> #include <string.h> /* typedef 定义步骤: 1、按定义变量方法先写出定义体 如 int i; 2、将变量名换成新类型名 如 int INTEGER; 3、最前面加typedef 如 typedef int INTEGER; 4、用新类型名定义变量*/ //typedef type NewTypeName; typedef int Integer; //编译时处理,只是为类型起别名,并没有创建类型。不能为变量创建别名 #define I i //define #开头是预编译时处理, 是替换适用于任何场合 void go(){ printf("gogogo"); } //简化了结构体 typedef struct info{ char name[23]; int age; }INFO; // INFO此时就是结构体类型,使用INFO定义变量 INFO info1 ={"luoxy", 18}; //简化结构体指针 typedef INFO *pI; //此时pI是结构体指针类型,可以用pI定义结构体指针变量, 例如: pI p1; 此时p1就是一个结构体指针变量 void main(){ Integer i=10 ; //等价于int i =10; printf("%d\n",I); int a[100]; typedef int ARR[100]; //把类型数组名替换成ARR ARR = int [100] ARR x; //此句等价于 int x[100]; char *str; typedef char *STR; //STR = char * STR str1 = "China is great!"; //等价于 char *str1 = "China is great!"; STR s[3] ={"China","is","great"}; // void (*p) (); //函数指针 //void (*GO) (); // 函数指针类型 GO是函数指针的名字, void (*)() 是函数指针的类型和参数列表 typedef void (*GO) (); //函数指针类型名是GO GO g1 = go; //简化函数指针,定义一个GO函数类型的指针变量go1,指向go()函数的首地址 g1(); //枚举类型 //enum day {Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}; //没有初始值默认为数字值:0,1,2,3,4,5,6,依次递增加1 //enum days {Sunday=10,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday}; //有初始值,从初始值开始递增1, 默认为数字值:10,11,12,13,14,15,16 //enum days {Sunday=10,Monday=12,Tuesday,Wednesday,Thursday,Friday,Saturday}; //错误,只能递增 1 enum days {Sunday=10,Monday=9,Tuesday=8,Wednesday=7,Thursday=6,Friday=5,Saturday=4}; //可以全部赋值 enum days d=Sunday; //定义一个枚举型的变量d,存储Sunday的值,也就是10 d--; //此时d = 9, 也就Monday }