一直在討論指向資料物件的指標。C 也允許宣告函式的指標。函式指標有多種用途,這裡將討論其中一些。
考慮以下實際問題。想要撰寫一個函式,該函式能夠對幾乎任何可以儲存在陣列中的資料集合進行排序。這可能是字串、整數、浮點數,甚至是結構的陣列。排序演算法對所有人來說都可以是相同的。例如,它可以是簡單的冒泡排序演算法,也可以是更複雜的 shell 或快速排序演算法。我們將使用簡單的冒泡排序來進行演示。
Sedgewick 通過設置一個函式來描述使用 C 代碼的冒泡排序,當傳遞指向數組的指針時,該函數將對其進行排序。如果我們呼叫該函式 bubble(),則 bubble_1.c 描述了一個排序程序,如下所示:
/* bubble_1.c */
#include <stdio.h>
int arr[10] = { 3,6,1,2,3,8,4,1,7,2};
void bubble(int a[], int N);
int main(void)
{
int i;
putchar('\n');
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
bubble(arr,10);
putchar('\n');
for (i = 0; i < 10; i++)
{
printf("%d ", arr[i]);
}
return 0;
}
void bubble(int a[], int N)
{
int i, j, t;
for (i = N-1; i >= 0; i--)
{
for (j = 1; j <= i; j++)
{
if (a[j-1] > a[j])
{
t = a[j-1];
a[j-1] = a[j];
a[j] = t;
}
}
}
}