1. 函数指针与typedef的实用指南
在嵌入式系统和底层开发中,函数指针是C语言最强大但也最令人困惑的特性之一。我第一次接触函数指针时,完全被它的语法搞晕了——那些星号、括号和参数列表的组合看起来就像天书。直到我发现了typedef这个神器,才真正理解了如何优雅地使用函数指针。
1.1 为什么需要函数指针
想象你正在开发一个嵌入式设备的控制程序。这个设备有多个传感器,每个传感器都需要不同的数据处理函数。如果每次调用都要写死函数名,代码会变得非常僵化。函数指针就像遥控器上的按钮——按下同一个按钮,根据当前模式可以执行不同功能。
c复制// 温度传感器处理函数
float processTemperature(float raw) {
return raw * 0.75f + 5.0f;
}
// 湿度传感器处理函数
float processHumidity(float raw) {
return raw * 0.5f + 10.0f;
}
// 没有函数指针的调用方式
if(sensorType == TEMP) {
processTemperature(rawValue);
} else {
processHumidity(rawValue);
}
这种写法在增加新传感器时会变得难以维护。函数指针提供了更灵活的解决方案。
1.2 函数指针的基本语法
函数指针的声明确实令人困惑。我第一次看到int (*func)(int, int)这种写法时,完全不明白为什么需要这么多括号。其实可以这样理解:
*func表示func是一个指针(*func)(...)表示这个指针指向函数int (...)(int, int)表示这个函数接受两个int参数并返回int
c复制// 声明一个指向处理函数的指针
float (*sensorProcessor)(float);
// 根据传感器类型分配处理函数
if(sensorType == TEMP) {
sensorProcessor = processTemperature;
} else {
sensorProcessor = processHumidity;
}
// 统一调
