高階関数の活用?

高階関数が使えるとどんな場面で便利かなー、と。とりあえずsort関数とか。

#include <stdio.h>
int lt(int a, int b){return a<b?1:0;}
int gt(int a, int b){return a>b?1:0;}
void sort(int list[], int n, int (*compare)()){
  int i, j, t;
  for(i=1;i<n;++i){
    t = list[i];
    for(j=i;j>0 && (*compare)(list[j-1], t);--j)
      list[j] = list[j-1];
    list[j] = t;
  }
}
main(){
  int list[] = {31, 6, 11, 80, 32}, i, n;
  n = sizeof(list)/sizeof(int);
  sort(list, n, lt);
  for(i=0;i<n;++i) printf("%d ", list[i]);
  puts("");
  sort(list, n, gt);
  for(i=0;i<n;++i) printf("%d ", list[i]);
  puts("");
}

実行結果

80 32 31 11 6
6 11 31 32 80

こういった具合に。標準ライブラリのqsort関数もこんな感じに比較関数を渡すらしい。C言語ではあと、共用体がどんな場面で有効なのかよくわからないなあ。
どうでもいいけど、大学の計算機室でほげほげしてるときに、どうやら課題でソート関数を作成してるらしい一年生の「標準ライブラリでqsort関数ってのがあるらしいぜ」とかいう会話を聞くと初々しいなあと思いますよね。あと君達、sqrt関数とか使うときには「-lm」を忘れちゃいけないよ。

test