这个语法正确吗?cmp
是指向函数的指针。我的程序一切正常,但是:
看!我在函数中声明*
时没有使用cmp
。为什么我的代码工作?
当我用int (*cmp)
声明它时,一切都很好。
这是怎么回事??
RangeTreeP createNewRangeTree(Element participateWorkers[], int arrsize,
int cmp(ConstElement, ConstElement))
不应该是:
RangeTreeP createNewRangeTree(Element participateWorkers[], int arrsize,
int (*cmp)(ConstElement, ConstElement))
?
对这个
createNewRangeTree
函数的调用是:createNewRangeTree(tempArr, NUM_PAR, &teacherCmpSalary)
teacherCmpSalary
是一个常规函数,如下所示:int teacherCmpSalary(ConstElement c1, ConstElement c2)
最佳答案
两种形式都是正确的。
如果定义的函数参数是函数类型的,如第一个示例中所示,它将自动“调整”为与函数类型对应的指针。
对于数组参数有一个非常相似的规则;您的参数Element participateWorkers[]
完全等同于Element *participateWorkers
。
(这两个规则都只适用于参数声明,而不适用于其他上下文。)
参考文献:N1570(2011年ISO C标准的最新草案),第6.7.6.3节,第7段(数组)和第8段(函数)。
不可能有数组或函数类型的参数,因此对应指针类型的参数的语法是“借用”的。
就我个人而言,我更喜欢使用指针表示法,因为它更明确,但您至少应该理解这两种形式,因为您将在其他人的代码中看到它们。