C++语言程序设计

函数指针通常作为另一个函数的参数，我们这里以折半查找函数作为例子。假定对一个已经由小到大排序（按字符串中字符的ASCII码或Unicode码的大小排序）的字符串数组（称为查找表），查找它的元素中是否存在一个元素与另一个字符串（称为查找项）相等，函数的代码如下：

| 例7-12

1 int BinSearch (char *item, char *table[],
2 int n, int (*Compare)(const char*, const char*))
{
int bot = 0;
int top = n - 1;
int mid, cmp;
3 while (bot <= top)
{
4 mid = (bot + top) / 2;
5 if ((cmp = Compare(item,table[mid])) == 0)
6 　return mid; // 返回查出的元素的在数组中的序号
else if (cmp < 0)
top = mid - 1; // 查找数组的下半部
else
7 　　　bot = mid + 1; // 查找数组的上半部
}
8 return -1; // 未查到
}

本例中，查找表是数组table，查找项是变量item，在table中查找是否含有item的元素。Compare是一个函数指针，用于比较item与table中的元素是否相等。函数体主要是一个while循环语句，每循环一次，对table元素的查找范围就减小一半。当item与table中的某一个元素匹配成功或查找范围的两端（bot和top）产生冲突（即bot>top）时，查找结束。
item每次与位于table中间的元素进行比较，如果匹配成功，即它们相等，则返回后者在table中的序号；如果item比中间元素小，则查找table的下半部；如果item比中间元素大，则查找table的上半部；如果table中没有与item相等的元素，则函数返回-1。
下面给出了调用BinSearch函数的例子：
char *cities[] = {"Beijing", "Shanghai", "Tianjin", "Zhongqing"};
cout << BinSearch("Tianjin ", cities, 4, strcmp) << '\n';
上述调用的输出结果是2。