我们完成了一项家庭作业,教授给了我们解决方案。问题只是想出一个我们可以使用函数指针和代码的情况。
他的榜样是:
#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;
}
为什么我们使用它们?他们使用更少的内存吗?是这样我们可以将多个函数调用到参数或其他函数以使其更简单吗? 似乎它们更复杂,至少对于一个初学程序员来说。
答案 0 :(得分:1)
我的问题是,这与做同样的事情:[...]
简而言之,是的。
为什么我们使用它们?
事实上,我们不经常使用它们,尤其是在C ++中。我们确实在C中使用它们。
尽管如此,理解函数指针很有用。经典用法的一些例子是:
qsort()
如何比较数组元素; 答案 1 :(得分:1)
为什么要使用函数指针?
有几种情况可以使用指向功能的指针。一 最常见的是您正在编写函数的情况 执行任务(例如对数组进行排序),但您希望用户执行此操作 能够定义如何执行该任务的特定部分 (例如数组是按升序还是降序排序 订购)。让我们仔细看看这个问题 特别是对排序,作为一个可以推广到的例子 其他类似的问题。
所有排序算法都遵循类似的概念:排序 算法遍历一堆数字,对比对 数字,并根据这些数字重新排序数字 比较。因此,通过改变比较(可以是a 函数),我们可以改变函数的排序方式而不会影响 其余的排序代码。
虽然它经常用于排序,但还有其他用途,例如allowing callbacks when loading from a resource like a database.
更简洁地说,您可以通过简单地指向它们来动态引用先前定义的函数,当然还可以调用它们。
参考: