typedef的4种常见用法:
1、给已定义的变量类型起个别名;
2、定义函数指针类型;
3、定义数组指针类型;
4、定义数组类型。
没加typedef之前如果是个数组,那么加typedef之后就是数组类型;
没加typedef之前如果是个函数指针,那么加typedef之后就是指针类型;
没加typedef之前如果是个指针数组,那么加typedef之后就是指针数组类型;
typedef char TA[5]; //定义字符数组类型TA,PA定义的变量是含5个char元素的数组
typedef char *TB[5];//定义指针数组类型,PB定义的变量是含5个char*指针元素的数组
typedef char (*TC)[5];//数组指针类型,PC定义的变量是一个指向数组的指针,数组含5个char型元素
一、给已定义的变量类型起个别名
typedef unsigned int uint8_t; //uin8_t就是unsigned int的别名,这是最基础的用法
struct _person {
char name[20];
uin8_t age;
};
typedef struct _person person_t;
//以上两段也可以合并为一段,这种用法也很基础
struct _person {
char name[20];
uin8_t age;
}person_t;
二、定义函数指针类型
我们先看一下如何定义函数指针变量,再看如何定义函数指针类型
1、定义函数指针变量
(1) int (pFunc[5])(char frame, int len);
定义了一个函数指针变量pFunc,它可以指向这样的函数:返回值为int,形参为char*、int
(2) int *(pFunc[5])(int len);
定义了一个函数指针数组(5个函数指针类型),他们都可以指向这样的函数:返回值为int,形参为int
2、定义函数指针类型
定义函数指针类型,必须使用typedef,方法就是,在“定义函数指针变量”前加上typedef。
typedef int (pFunc[5])(char frame, int len);
举例:
typedef int *(pFunc_t)(char* frame, int len); //定义了一个类型 pFunc_t
int myfunc(char *data, int len) {
int ret = 0;
//其他功能代码
return ret;
}
int main()
{
pFunc_t pf = myfunc; //使用类型pFunc_t来定义函数指针变量
//其他功能代码
return 0;
}
三、定义数组指针类型
typedef int (*pArr_t)[5];
int main()
{
int a[5] = {1,2,3,4,5};
pArr_t pA; //定义数组指针变量pA
pA = &a;
//其他功能代码
return 0;
}
四、定义数组类型
typedef int arr_t[5];
int main()
{
arr_t a;
a[0] = 1;
a[1] = 2;
a[2] = 3;
a[3] = 4;
a[4] = 5;
a[5] = 6; //错,数组下标越界
//其他功能代码
return 0;
}