关键字 typedef 用于为系统固有的或程序员自定义的数据类型定义一个别名。数据类型的别名通常使用大写字母,目的是为了与已有的数据类型相区分。
注意:typedef只是为一种已存在的类型定义一个新的名字而已,并未定义一种新的数据类型。
//自定义指针类型
typedef char * pChar; //自定义指针类型 (定义新类型名 pChar: 指代 char * )
pChar a,b; //等价于 char *a; char *b;
//注意和宏 #define char * pChar; 简单替换不一样
//宏替换后是 char* a,b; 编译会报错。
//自定义枚举类型
typedef enum{false=0,true} bool; //自定义枚举类型 (bool:指代 enum{false=0,true} )
bool a=true;
//下面这几个相对特殊
//自定义数组类型
typedef int Array[10]; //自定义数组类型 (Array: 指代 int [10] )
Array train={9,5,2,7}; //等价于 int train[10] = {9,5,2,7};
//自定义函数类型
typedef char (*pFun)(int data); //自定义函数类型
// (pFun: 指代 char (*)(int data) 函数类型)
pFun fun; //等价于 char (*fun)(int data);
// (可理解为 char (*)(int data) fun;)
//自定义结构体类型
typedef struct { //自定义结构体类型 (stu: 指代 struct { char ismale....})
char ismale;
int age;
}stu;
stu s; // 等价于 struct stu s;
例1:自定义数组类型
#include <stdio.h>
typedef int Array[10]; //自定义数组类型 (Array: 指代 int [10] )
int main()
{
Array train={9,5,2,7}; //等价于 int train[10] = {9,5,2,7};
printf("%d\n",train[1]);
return 0;
}
例2:自定义函数类型
#include <stdio.h>
typedef char (*pFun)(int data); //定义 新类型 pFun:它指代的是 函数类型 char (*)(int data)
char get(int data)
{
printf("get data=%d\n",data);
return 1;
}
int main()
{
pFun fun; //定义变量fun,变量的类型是函数类型(pFun)
//等价于 char (*fun)(int data); (可理解为 char (*)(int data) fun;形式)
fun = get; //变量赋值(必须是和 pFun匹配的函数的函数名)
fun(3);
return 0;
}
例3:自定义结构体类型
#include <stdio.h>
//自定义结构体类型 (stu: 指代 struct { char ismale....})
typedef struct {
char ismale;
int age;
}stu;
int main()
{
stu s={1,20}; //等价于 struct stu s={1,20};
printf("%d",s.age);
return 0;
}