C语言中的函数指针是一个变量,它存储函数的地址,从而允许动态选择要调用的函数。函数指针的常规声明:
// 接受int并返回int的函数指针 int (*f_ptr)(int);
对于指针数组:
int func1(int x) { return x + 1; } int func2(int x) { return x * 2; } int (*f_arr[2])(int) = { func1, func2 }; int result = f_arr[1](10); // 返回20
是否可以通过函数指针调用具有不同签名的函数?
常见错误答案: “是的,如果使用类型转换”。
正确答案: 从技术上讲,由于指针的动态特性,这是可能的,但此操作会导致运行时错误和不可预测的行为,因为调用的函数具有不同的调用约定和参数组合。
示例:
void funcA(int x) { printf("A: %d ", x); } void funcB(float y) { printf("B: %f ", y); } void (*fptr)(int) = (void (*)(int)) funcB; fptr(5); // 错误:将传递错误的数据
故事
故事
故事
在固件中未检查函数指针更改的结果。处理程序数组的初始化不足会导致调用空指针(NULL),设备随后无响应而不通知用户。