次の宣言があります。
void qsort(void *lineptr[], int left, int right, int (*comp)(void *, void *));
int numcmp(char *, char *);
int strcmp(char *s, char *t);
次に、プログラムのどこかに次の呼び出しがあります。
qsort((void**) lineptr, 0, nlines-1,
(int (*)(void*,void*))(numeric ? numcmp : strcmp));
(最初の 3 つの引数と は無視してくださいnumeric
)。
これは何ですか?
(int (*)(void*,void*))(numeric ? numcmp : strcmp)
4番目の引数として「2つのポインターを取得して返すqsort
関数へのポインター」を期待していることは理解していますが、上記の内容はどのようにそれを満たしていますか? 2 つの括弧で構成されているため、ある種のキャストのように思えますが、それは非常に奇妙なキャストです。関数を取り、この関数を「2つのポインターを取得して返す関数へのポインター」にするためです。これは無意味です。(ここでは、変数の前の括弧内の型が変数をその型に昇格させるという
規則に従いました)。void
int
void
int
type
だから私はそれを間違っていると思う. 多分誰かがこれを読む方法を教えてくれる. 順序は何ですか?