这个语法正确吗?
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段(函数)。
不可能有数组或函数类型的参数,因此对应指针类型的参数的语法是“借用”的。
就我个人而言,我更喜欢使用指针表示法,因为它更明确,但您至少应该理解这两种形式,因为您将在其他人的代码中看到它们。

09-30 23:46
查看更多