定义函数指针的三种常见的语法形式
在 C 语言中,定义函数指针主要有 三种 常见的语法形式。这三种方式本质相同,但在代码可读性和复用性上有所区别。
1. 直接定义变量(基础语法)
这是最原始的写法,直接在声明变量时指定函数签名。
语法格式:
typedef 返回值类型 (*类型别名)(参数类型列表); 类型别名 变量名;
示例:
// 1. 定义类型别名 MathOp typedef int (*MathOp)(int, int); // 2. 使用别名定义变量 MathOp op1; MathOp op2; // 3. 赋值 op1 = add; op2 = subtract;
2. 使用 typedef 定义函数指针类型(推荐)
这是工程开发中最常用的方式。先通过 typedef 给复杂的函数指针类型起一个别名,然后用这个别名来定义变量。这种方式代码清晰,易于维护。
语法格式:
typedef 返回值类型 函数类型别名(参数类型列表); 函数类型别名 *指针变量名;
示例:
// 1. 定义函数类型 FuncType typedef int FuncType(int, int); // 2. 定义指向该类型的指针变量 FuncType *pFunc; // 3. 赋值 pFunc = add;
这种方式在定义函数指针数组或作为结构体成员时优势明显,避免了重复书写冗长的签名。
3. 先定义函数类型,再定义指针(较少用)
这种方式分两步走:先用 typedef 定义一个“函数类型”,然后再像定义普通指针一样,在该类型后加 * 来定义指针变量。
语法格式:
typedef 返回值类型 函数类型别名(参数类型列表); 函数类型别名 *指针变量名;
示例:
// 1. 定义函数类型 FuncType typedef int FuncType(int, int); // 2. 定义指向该类型的指针变量 FuncType *pFunc; // 3. 赋值 pFunc = add;
虽然这种写法在逻辑上很直观(类似 typedef int IntType; IntType *p;),但在实际 C 语言项目中不如第 2 种方式常见,因为第 2 种方式更直接地表达了“这是一个指针”的概念。
浙公网安备 33010602011771号