【问题标题】:what is the difference between calling a function as fun() and fun?将函数调用为 fun() 和 fun 有什么区别?
【发布时间】:2012-05-28 08:36:27
【问题描述】:

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

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

这里的排序又是一个函数。但我一直认为任何被调用的函数都应该在函数名之后有(),或者我错过了什么。

我只是想知道这将如何工作以及调用这些函数有什么区别。谢谢!

【问题讨论】:

  • 我相信它被用作指向函数的指针:newty.de/fpt/index.html
  • 在 qsort 中,您不是在调用函数,而是传递“sort”函数的地址,以便 qsort 可以调用它。

标签: c function


【解决方案1】:
qsort(array, 10, sizeof(int), sort);

this 传递一个指向函数“sort”的指针,以便函数“qsort”可以调用这个函数。

【讨论】:

  • 确实,sort 实际上是 &sort 的缩写形式 - 编译器看到你没有调用函数,所以唯一有意义的是你正在尝试传递它的地址。
【解决方案2】:

该函数未被调用,它作为函数指针传递。 see Function Pointers in C and C++

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-21
        • 2018-07-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 1970-01-01
        • 2022-12-11
        相关资源
        最近更新 更多