无法理解c ++

时间:2018-02-14 06:07:53

标签: c++ function-pointers

我正在阅读Bjarne Stroustrup的 C ++编程语言。它陈述了一个解释函数指针的例子:

int cmp1(const void∗ p, const void∗ q) // Compare name strings
{
  return strcmp(static_cast<const User∗>(p)−>name,static_cast<const User∗>(q)−>name);
}

然后它在cmp1中使用此ssort,如下所示:

int main()
{
  cout << "Heads in alphabetical order:\n";
  ssort(heads,6,sizeof(User),cmp1);
  print_id(heads);
  //Rest of function body                
}

我的问题是:&cmp1是否作为ssort()中的参数传递,因为我们不能将函数作为参数传递,我们只能传递一个函数指针?

2 个答案:

答案 0 :(得分:1)

  

我的问题是:&cmp1是否作为ssort()中的参数传递,因为我们不能将函数作为参数传递,我们只能传递一个函数指针?

您的代码不使用&cmp1。因此,您的问题与您的代码不符。

但是,可以在不使用addressof运算符(&)的情况下传递函数。

ssort(heads, 6, sizeof(User), &cmp1);

相同
ssort(heads, 6, sizeof(User), cmp1);

函数衰减到此上下文中的函数指针。

答案 1 :(得分:0)

函数名称确实代表函数可执行代码的起始地址。所以它更像是数组,其名称可以用作指向数组本身的指针。也通过 https://www.geeksforgeeks.org/function-pointer-in-c/