我正在阅读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()
中的参数传递,因为我们不能将函数作为参数传递,我们只能传递一个函数指针?
答案 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/