C言語のcompare関数の使い方は?
C言語のcompare関数は2つの値を比較するために使用される関数で、2つの値の大小関係を示す整数値を返すのが一般的です。compare関数のシグネチャは一般的に次のとおりです:
int compare(const void *a, const void *b); // 関数シグネチャ
この中で、a と b は比較対象の二つの値へのポインタです。比較関数の返り値は次の意味を持っています。
- aがbより小さいときは負の整数をかえす。
- aがbと等しいなら0を返す。
- aがbより大きい場合は正の整数を返します。
数値を比較するcompare関数はqsort関数(配列のソートに使用)、bsearch関数(配列内の二分探索に使用)など、標準Cライブラリ関数の中で広く使用されている。この関数は、ユーザー定義のデータの比較が必要な場合にも、カスタムのcompare関数を記述することによって利用できる。
以下の例は compare 関数を使用して、整数の配列をソートする方法を示す簡単な例です:
#include <stdio.h>
#include <stdlib.h>
int compare(const void *a, const void *b) {
int num1 = *(int*)a;
int num2 = *(int*)b;
if (num1 < num2)
return -1;
else if (num1 > num2)
return 1;
else
return 0;
}
int main() {
int arr[] = {5, 2, 8, 1, 9};
// 使用qsort函数对数组进行排序
qsort(arr, sizeof(arr)/sizeof(arr[0]), sizeof(int), compare);
// 打印排序后的结果
for (int i = 0; i < sizeof(arr)/sizeof(arr[0]); i++) {
printf("%d ", arr[i]);
}
return 0;
}
この例では、compare 関数が整数型の比較を行っています。main 関数で、qsort 関数を呼び出し、compare 関数を引数として渡すことで、整数の配列をソートしています。最後に、ループを使用してソートされた結果を出力しています。出力は 1 2 5 8 9 になります。