在程序设计过程中, 我们通常都会定义一些函数, 在程序过程中(或者在运行时), 根据假定的条件(运行时情况), 由程序(程序)选择应该执行那个函数。由此,程序中经常会有很多的 if...else条件判断或者switch分支语句。用条件判断或者分支语句来处理这些情况,本是无可厚非,但这样做起来会使程序变得可读性不高,并且不易维护。
但是,如果我们用指针与数组来实现,就会使这样的程序变得非常简单易懂,而且便于维护。
设想有这样一个题目,要求用户从控制台输入命令,根据命令决定要做什么样的处理。那么我们就可以编写一个简单的程序实现打印(print)、查询(search)、增加(add)、删除(delete)和更新(update)功能。由此我们编写以几个函数(只给出函数原型):
void print(void);
void search(void);
void add(void);
void delete(void);
void update(void);
int checkInput(char *); // 根据输入内容返回对应原索引值
为了配合以上函数实现程序功能,定义以下数组:
const char *order[] = {"print", "search" , "add" , "delete" , "update"};
void (*orderFunc[ ] )(void) = {print, search, add, delete, update};
其中,第一个数组是预先定义的可能会出现的命令,第二个数组是指向函数的指针数组。有了这两个数组,可以编写主函数如下:
int main()
{
int orderIndex = -1;
char order[10];
while(orderIndex < 0)
{
printf("mypro$");
gets(order);
orderIndex = checkInput(order);
}
orderFunc[orderIndex]();
return 0;
}
当然,这里而有很多细节没有实现,因为这并不是我今天想要说明的问题。我想要说明的是,使用函数指针可以非常方便地实现我们想要的功能。