C语言使用函数指针数组

函数指针数组可以基于某些条件选择要执行的函数,声明这种数组很简单,只要把函数指针声明为数组的类型即可,如下所示。这个数组的所有元素都被初始化为NULL。如果数组的初始化值是一个语句块,系统会将块中的值赋给连续的数组元素。本例中只有一个值,我们会用这个值来初始化数组的所有元素。

typedef int (*operation)(int, int);
operation operations[128] = {NULL};

也可以不用typedef来声明这个数组,如下:

int (*operations[128])(int, int) = {NULL};

这个数组的目的是可以用一个字符索引选择对应的函数来执行。比如,如果存在*字符就表示乘法函数,我们可以用字符作为索引是因为字符字面量其实是整数,128个元素对应前128个ASCII字符。我们会把这个定义用在3.3.4节中实现的addsub函数上。

数组初始化为NULL后,我们把addsub函数赋给加号和减号对应的元素:

void initializeOperationsArray() {
    operations['+'] = add;
    operations['-'] = subtract;
}

将前面的evaluate函数改写为evaluateArray。接下来我们用操作字符作为索引来使用operations,而不是调用select函数来获取函数指针。

int evaluateArray(char opcode, int num1, int num2) {
    fptrOperation operation;
    operation = operations[opcode];
    return operation(num1, num2);
}

用下面的代码测试这些函数:

initializeOperationsArray();
printf("%d\n",evaluateArray('+', 5, 6));
printf("%d\n",evaluateArray('-', 5, 6));

执行结果是11和-1。更健壮的evaluateArray函数版本需要在执行函数之前检查空指针。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程