我遇到了一段代码,如下所示
qsort(array, 10, sizeof(int), sort);
这里 sort 又是一个函数。但我总是觉得任何被调用的函数都应该()
在函数名之后,或者我错过了什么。
我只是想知道这将如何工作以及调用这些函数有什么区别。谢谢!
qsort(array, 10, sizeof(int), sort);
这传递了一个指向函数“sort”的指针,以便函数“qsort”可以调用这个函数。
该函数未被调用,它作为函数指针传递。请参阅 C 和 C++ 中的函数指针
您将指向函数的指针传递sort
给 function qsort
,以便qsort
可以将该函数用作比较函数。
正确的语法应该包括一个&
before sort
(因为sort
是一个函数,而不是一个指针,所以我们需要引用它),但是编译器无论如何都会为你“添加”它。
如果您查看 C 语法(例如在 C 标准中),您会发现有一个运算符写为()
,它是函数调用运算符。它类似于数组下标运算符 []
,因为它应用于标识符,在这种情况下,是函数的名称。如果函数的标识符后面没有函数调用运算符,则该标识符表示指向该函数的指针。所以现在很清楚,qsort
最后一个参数是:指向比较函数的指针。每当需要比较两个元素时,它都会调用其最后一个 arg 指向的函数。
sort
您示例中的函数称为回调函数,qsort
将其回调(多次,使用不同的参数)。