3

私は以下のようなコードに出くわしました

qsort(array, 10, sizeof(int), sort);

ここでもソートは関数です。しかし、呼び出される関数は関数名の後にあるべきである()、または何かが足りないという印象を常に持っていました。

これがどのように機能するのか、そしてこれらのような関数を呼び出す際の違いは何かを知りたかっただけです。ありがとう!

4

4 に答える 4

2
qsort(array, 10, sizeof(int), sort);

これにより、関数「sort」へのポインタが渡され、関数「qsort」がこの関数を呼び出すことができるようになります。

于 2012-05-28T08:38:58.147 に答える
2

その関数は呼び出されず、関数ポインタとして渡されます。CおよびC++の関数ポインタを参照してください

于 2012-05-28T08:40:08.640 に答える
1

C文法(たとえばC標準)を見る()と、関数呼び出し演算子である、と書かれた演算子があることがわかります。これは、識別子(この場合は関数の名前)に適用されるという点で、配列の添え字演算子 に似ています。[]関数の識別子の後に関数呼び出し演算子が続かない場合、識別子はその関数へのポインターを表します。これで、qsort最後の引数は、比較関数へのポインタであることが明らかになりました。2つの要素を比較する必要があるときはいつでも、最後の引数が指す関数を呼び出します。

この例の関数はコールバック関数sortと呼ばれ、コールバックqsortします(数回、異なる引数を使用)。

于 2012-05-28T08:44:45.177 に答える
1

sort関数へのポインタを関数に渡して、関数を比較関数として使用できるようにしますqsortqsort

正しい構文には&beforeが含まれている必要がありますsort(これsortは関数であり、ポインターではないため、参照する必要があります)が、コンパイラーはとにかくそれを「追加」します。

于 2012-05-28T08:39:39.607 に答える