3

我遇到了一段代码,如下所示

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

这里 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

您将指向函数的指针传递sort给 function qsort,以便qsort可以将该函数用作比较函数。

正确的语法应该包括一个&before sort(因为sort是一个函数,而不是一个指针,所以我们需要引用它),但是编译器无论如何都会为你“添加”它。

于 2012-05-28T08:39:39.607 回答
1

如果您查看 C 语法(例如在 C 标准中),您会发现有一个运算符写为(),它是函数调用运算符。它类似于数组下标运算符 [],因为它应用于标识符,在这种情况下,是函数的名称。如果函数的标识符后面没有函数调用运算符,则该标识符表示指向该函数的指针。所以现在很清楚,qsort最后一个参数是:指向比较函数的指针。每当需要比较两个元素时,它都会调用其最后一个 arg 指向的函数。

sort您示例中的函数称为回调函数,qsort将其回调(多次,使用不同的参数)。

于 2012-05-28T08:44:45.177 回答