函数指针和常规调用的区别

Difference in Function Pointers and regular calling

本文关键字:区别 调用 常规 指针 函数      更新时间:2023-10-16

我们有一项家庭作业,现在已经结束了,教授给了我们解决方案。问题只是出现了一种情况,我们可以使用函数指针和代码

他的例子是:

#include <iostream>
using namespace std;
int dvalue(int x)
{
return x*x;
}
int tvalue(int x)
{
return x*x*x;
}
void printValue(int (*fptr)(int), int x)
{
cout << fptr(x) << endl;
}
int main()
{
int (*pfnc)(int);
int value = 10;
pfnc = dvalue;
printValue(pfnc, 10);
}

我的问题是,这和做这件事是一样的吗:

int main()
{
cout << devalue(10) << endl;
}

我们为什么要使用它们?他们用的内存少吗?这只是为了让我们可以对一个参数或另一个函数调用多个函数以使其更简单吗?它们似乎更复杂,至少对于一个刚开始的程序员来说是这样。

我的问题是,这和做这件事是一样的吗:[…]

简而言之,是的。

我们为什么要使用它们?

事实上,我们并不经常使用它们,尤其是在C++中。我们确实在C.中更频繁地使用它们

尽管如此,理解函数指针还是很有用的。一些经典用途的例子有:

  • 告诉qsort()如何比较数组元素
  • 指定启动新线程时要运行的函数

为什么要使用函数指针?

有几种情况下指向函数的指针可以使用。一最常见的情况是编写函数执行任务(例如对数组进行排序),但您希望用户能够定义如何执行该任务的特定部分(例如数组是升序还是降序订单)。让我们仔细看看这个问题的应用情况特别是排序,作为一个可以推广到其他类似问题。

所有的排序算法都有一个相似的概念:排序算法遍历一堆数字,对它们进行比较的结果,并根据这些结果重新排序比较。因此,通过改变比较(可以是函数),我们可以在不影响其余的排序代码。

尽管它经常用于排序,但它还有其他用途,例如从数据库等资源加载时允许回调。

更简洁地说,您可以通过简单地指向以前定义的函数,当然也可以调用它们,动态地引用它们

参考文献:

http://www.learncpp.com/cpp-tutorial/78-function-pointers/

相关文章: