これは、qsort()のようないくつかの標準ライブラリ関数で使用される標準比較関数のように見えます。この関数では、2つの要素がそれぞれに等しいかどうかを示す比較関数とともに、ある種のデータ項目の配列を使用して関数を呼び出します。そうではなく、そうでない場合は、それらの照合順序は何ですか。
したがって、voidポインターが指すのは、プログラマー次第です。比較関数を呼び出すqsort()などの関数は、2つの配列要素がどの順序になるかを知りたいだけなので、これが比較関数インターフェイスでvoidポインターを使用する目的です。配列要素は、または比較の方法であり、配列の開始アドレスと各要素のサイズ、およびそこにある要素の数を知っているだけです。
標準ライブラリのもう1つの関数は、bsearch()関数です。
したがって、これを使用するには、次のようなコードが必要になる場合があります。qsort()のマニュアルページを参照してください。
typedef struct {
int iValue;
char sName[10];
} DataValue;
// compare two elements of the array and indicate which one is higher
// or lower in collating sequence or if they are equal.
int dataComp (void *one, void *two)
{
return ((DataValue *)one)->iValue - ((DataValue *)two)->iValue;
}
int main (int argc, char *argv[])
{
DataValue myData[25];
//.. put some data stuff in the array.
// call qsort with the array. specify number of elements and size of each one
qsort (myData, sizeof(myData)/sizeof(myData[0]), sizeof(myData[0]), dataComp);
}