で新しい機能を取得するための単一の引数をC関数を提供します は私がセンターにその角度に基づいてリストのポイントを並べ替えしようとしています少ない引数
私はサークルにどこ気にしませんリストは開始されますが、循環的にソートする必要があります。私は、qソートを使用したいが、私の比較関数は、3(中央と比較する二つの点)がある一方で、それは、唯一の2つの引数との比較機能を必要とします。
int compareByAngle(Point *center, Point *lhs, Point *rhs)
{
return (lhs->x - center->x) * (rhs->y - center->y) - (rhs->x - center->x) * (lhs->y - center->y);
}
あなたは私が持つ機能を得ることができる方法を知っていますがセンターを別の関数にあらかじめ供給することによって、2つの引数だけが得られますか?これは、haskellのような言語では微風ですが、私は関数ポインタと引数を使わなければならないことは知っていますが、C言語ではどうやって行うのかわかりませんが、これらの手法にはあまり慣れていません。
ありがとうございます!
int compareByAngle(Point *lhs, Point *rhs)
{
static Point *center=NULL;
if (lhs==NULL) {
center=rhs;
return rhs!=NULL; // or any other usefull code
} else if (center==NULL) {
// do some error handling
} else {
return (lhs->x - center->x) * (rhs->y - center->y) - (rhs->x - center->x) * (lhs->y - center->y);
}
}
そして、それを使用する:それはポインタLHSとRHSはLHSがNULLの場合、NULL→はRHSを使用して初期化ローカル静的変数センターを使用することはできませんと仮定成し遂げるために
ソートに独自のカスタム関数を使用してみませんか? – wrangler
'qsort'比較関数は2つの引数をとります。あなたの場合、これらは実際のデータではありませんが、 'struct'へのポインタであり、*考慮すべき3項目の情報を保持しています。 'compare'関数が0以外の値を返した場合、' qsort'はその情報を使って渡される構造体の配列をソートします。 –
@wranglerこれは標準ライブラリの一部を書き直すことを意味します。ここでは不要と思われます。 – Toctave