面试题答案
一键面试以下是使用C语言实现该需求的代码示例,以及可能出现的常见错误和预防方法:
代码示例
#include <stdio.h>
// 定义函数类型
typedef int (*FuncPtr)(int, int);
// 示例函数1
int add(int a, int b) {
return a + b;
}
// 示例函数2
int subtract(int a, int b) {
return a - b;
}
int main() {
// 定义函数指针数组
FuncPtr funcPtrArray[] = {add, subtract};
// 定义int类型的指针数组
int num1 = 10;
int num2 = 5;
int *intPtrArray[] = {&num1, &num2};
// 将指针数组的元素传递给函数指针数组中的某个函数进行处理
int result = funcPtrArray[0](*intPtrArray[0], *intPtrArray[1]);
printf("结果: %d\n", result);
return 0;
}
常见错误及预防方法
-
函数指针未初始化:
- 错误描述:使用未初始化的函数指针,可能导致程序崩溃。
- 预防方法:在使用函数指针数组前,确保每个元素都被正确初始化,指向实际存在的函数。
-
访问越界:
- 错误描述:在访问函数指针数组或
int
指针数组时,索引超出了数组的有效范围。 - 预防方法:在使用数组索引时,确保索引值在数组的有效范围内。可以使用
sizeof
操作符来计算数组的大小,避免手动指定索引值导致越界。
- 错误描述:在访问函数指针数组或
-
解引用空指针:
- 错误描述:如果
int
指针数组中的元素是NULL
,解引用它会导致未定义行为。 - 预防方法:在解引用指针之前,先检查指针是否为
NULL
。
- 错误描述:如果
-
类型不匹配:
- 错误描述:如果函数指针的类型与实际调用的函数类型不匹配,可能导致未定义行为。
- 预防方法:使用
typedef
定义函数指针类型,并确保所有函数指针的类型一致,同时实际调用的函数也与该类型匹配。