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
}

浙公网安备 33010602011771号