我遇到了一段代码,如下所示
qsort(array, 10, sizeof(int), sort);
这里排序又是一个功能。但我总是认为任何被调用的函数应该在函数名后面有()
或者我错过了什么。
我只是想知道这将如何工作以及调用这些函数的区别是什么。谢谢!
答案 0 :(得分:2)
qsort(array, 10, sizeof(int), sort);
这会传递一个指向函数“sort”的指针,以便函数“qsort”可以调用此函数。
答案 1 :(得分:2)
该函数未被调用,它作为函数指针传递。 see Function Pointers in C and C++
答案 2 :(得分:1)
您正在将函数sort
的指针传递给函数qsort
,以便qsort
可以将该函数用作比较函数。
正确的语法应该在&
之前包含sort
(因为sort
是函数,而不是指针,所以我们需要引用它),但编译器“添加”它无论如何,对你而言。
答案 3 :(得分:1)
如果查看C语法(例如在C标准中),您会发现有一个运算符写为()
,它是函数调用运算符。它类似于数组下标运算符 []
,因为它应用于标识符,在本例中是函数的名称。如果函数的标识符未被函数调用操作符跟随,则标识符表示该函数的指针。所以现在很清楚,qsort
的最后一个arg是什么:指向比较函数的指针。每当需要比较两个元素时,它就会调用最后一个arg指向的函数。
示例中的sort
函数称为回调函数,qsort
将其回调(多次,使用不同的参数)。