函数指针数组可以基于某些条件选择要执行的函数,声明这种数组很简单,只要把函数指针声明为数组的类型即可,如下所示。这个数组的所有元素都被初始化为NULL
。如果数组的初始化值是一个语句块,系统会将块中的值赋给连续的数组元素。本例中只有一个值,我们会用这个值来初始化数组的所有元素。
也可以不用typedef
来声明这个数组,如下:
这个数组的目的是可以用一个字符索引选择对应的函数来执行。比如,如果存在*
字符就表示乘法函数,我们可以用字符作为索引是因为字符字面量其实是整数,128个元素对应前128个ASCII字符。我们会把这个定义用在3.3.4节中实现的add
、sub
函数上。
数组初始化为NULL
后,我们把add
和sub
函数赋给加号和减号对应的元素:
将前面的evaluate
函数改写为evaluateArray
。接下来我们用操作字符作为索引来使用operations
,而不是调用select
函数来获取函数指针。
用下面的代码测试这些函数:
执行结果是11和-1。更健壮的evaluateArray
函数版本需要在执行函数之前检查空指针。