Cでcharへのポインタの配列があるとします。
char *data[5] = { "boda", "cydo", "washington", "dc", "obama" };
そして、qsortを使用してこの配列をソートしたいと思います。
qsort(data, 5, sizeof(char *), compare_function);
比較機能が思いつかない。何らかの理由でこれは機能しません:
int compare_function(const void *name1, const void *name2)
{
const char *name1_ = (const char *)name1;
const char *name2_ = (const char *)name2;
return strcmp(name1_, name2_);
}
多くの検索を行ったところ**
、qsort内で使用する必要があることがわかりました。
int compare_function(const void *name1, const void *name2)
{
const char *name1_ = *(const char **)name1;
const char *name2_ = *(const char **)name2;
return strcmp(name1_, name2_);
}
そして、これは機能します。
*(const char **)name1
誰かがこの関数での使用法を説明できますか?全くわかりません。なぜダブルポインタなのか?元の機能が機能しなかったのはなぜですか?
ありがとう、BodaCydo。