高階関数の活用?
高階関数が使えるとどんな場面で便利かなー、と。とりあえず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」を忘れちゃいけないよ。