功能指针和常规调用的区别

时间:2014-02-09 15:18:58

标签: c++ function pointers

我们完成了一项家庭作业,教授给了我们解决方案。问题只是想出一个我们可以使用函数指针和代码的情况。

他的榜样是:

#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;
}

为什么我们使用它们?他们使用更少的内存吗?是这样我们可以将多个函数调用到参数或其他函数以使其更简单吗? 似乎它们更复杂,至少对于一个初学程序员来说。

2 个答案:

答案 0 :(得分:1)

  

我的问题是,这与做同样的事情:[...]

简而言之,是的。

  

为什么我们使用它们?

事实上,我们不经常使用它们,尤其是在C ++中。我们确实在C中使用它们。

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

答案 1 :(得分:1)

为什么要使用函数指针?

  

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

     

所有排序算法都遵循类似的概念:排序   算法遍历一堆数字,对比对   数字,并根据这些数字重新排序数字   比较。因此,通过改变比较(可以是a   函数),我们可以改变函数的排序方式而不会影响   其余的排序代码。

虽然它经常用于排序,但还有其他用途,例如allowing callbacks when loading from a resource like a database.

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

参考:

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