typedef 函数指针的用法
-
typedef 可以简化代码,促进跨平台开发的目的
-
typedef 的行为有点儿像
#define
宏,用其实际类型替代同义字;不同的是,typedef 在编译时被解释,因此让编译器来应付超越预处理能力的文本替换 -
函数指针
typedef int (*PTR_FUNC)(int v1, int v2);
此用法一般用在给函数定义别名的时候;上面的例子定义PTR_FUNC
是一个函数指针,函数类型是带两个int
类型的参数,返回一个int
类型的数据;
分析此形式的用法时可以使用下面的方法:
先去掉typedef和PTR_FUNC,剩下的就是原变量的类型——int(*)(int, int)
-
变量类型别名
typedef struct {
int a;
int b;
} ExType_t;
这里把一个未命名结构体直接取了一个叫ExType_t
的别名,这样在定义此结构的实例时就可以这样:
ExType_t MyTypeObj;
typedef 取别名的格式为:typedef 变量类型 类型别名
简单的函数指针用法
int (*ptrAddFunc)(int a, int b);
typedef int (*PTR_ADD_FUNC)(int a, int b);
- 第一个语句定义了一个名为ptrAddFunc的变量,这个变量的数据类型为指向拥有二个int类型的参数,返回值为int类型的函数。
- 第二条语句只是将ptrAddFunc变量的数据类型取了一个别名——PTR_TEMP_FUNC。
- 分别使用这上面两种方法定义变量:
// 文件名:temp.c
#include <stdio.h>
typedef int (*PTR_FUNC)(int, int);
int Add(int a, int b) { return (a + b);}
int main(void) {
int (*ptrAdd1)(int a, int b); // 定义一个名为ptrAdd1的变量
PTR_FUNC ptrAdd2; // 定义一个名为ptrAdd2的变量
ptrAdd1 = Add;
ptrAdd2 = Add;
printf("%d
", ptrAdd1(10, 20));
printf("%d
", ptrAdd2(1, 2));
return 0;
}
如果你安装有gcc,则可在命令行终端下,直接使用下面命令即可查看结果:
- gcc -o temp.exe temp.c
- ./temp.exe