代码之家  ›  专栏  ›  技术社区  ›  Ashutosh Tiwari

无法理解c中的函数指针++

  •  -1
  • Ashutosh Tiwari  · 技术社区  · 6 年前

    我在读书 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 回复  |  直到 6 年前
        1
  •  1
  •   R Sahu    6 年前

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

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

    仍然可以在不使用 addressof 操作员( & ).

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

    与相同

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

    在此上下文中,函数衰减为函数指针。

        2
  •  0
  •   Anil    6 年前

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