C言語のcompare関数の使い方は?

C言語のcompare関数は2つの値を比較するために使用される関数で、2つの値の大小関係を示す整数値を返すのが一般的です。compare関数のシグネチャは一般的に次のとおりです:

int compare(const void *a, const void *b); // 関数シグネチャ

この中で、a と b は比較対象の二つの値へのポインタです。比較関数の返り値は次の意味を持っています。

  1. aがbより小さいときは負の整数をかえす。
  2. aがbと等しいなら0を返す。
  3. 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 になります。

bannerAds