我非常有兴趣在C中破解细节。
功能指针:
据我所知,函数指针只不过是一个C变量,它将函数的地址指向普通的C变量。这样我们就可以使用指针来调用函数。
问题:
答案 0 :(得分:1)
根据维基百科,“在计算机编程中,回调是对可执行代码或一段可执行代码的引用,它作为参数传递给其他代码。这允许较低级别的软件层调用更高级别层中定义的子例程(或函数)。“
在C中,回调是使用函数指针实现的。例如,See this link.
普通函数可以将另一个函数作为其参数之一吗?在这种意义上,回调是一个高级的东西,函数指针实现它们。
此外,还解释了另一个用例here。
答案 1 :(得分:0)
差异和用例与指针与常规对象基本相同。您可以存储指向函数的指针,并在编译时/运行时配置将调用哪个函数。考虑作为最简单的示例qsort
:
void qsort( void *ptr, std::size_t count, std::size_t size,
int (*comp)(const void *, const void *) );
有一个qsort
实现,但您可以使用不同的条件订购相同的元素数组。
答案 2 :(得分:0)
如果你不知道,在编译时,使用什么函数,你可以使用函数指针来解决这个问题。
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef int (*fx)(int, int);
int one(int a, int b) { return a + b + 1; }
int two(int a, int b) { return a + b + 2; }
int three(int a, int b) { return a + b + 3; }
int four(int a, int b) { return a + b + 4; }
int main(void) {
fx arfx[4] = {one, two, three, four};
srand(time(0));
for (int k = 0; k < 10; k++) {
int n = rand() % 4; // 0, 1, 2, or 3
int val = arfx[n](1, -1); // call one of functions in arfx
printf("result is %d.\n", val);
}
return 0;
}
答案 3 :(得分:0)
问题:
使用函数指针而不是使用函数指针的必要性是什么 单独的功能?
函数指针可以指向具有相同签名的各种函数,从而允许创建多态结构。它也可以作为回调 - 因此调用代码不需要知道可调用代码(可调用代码提供函数 - 依赖性反转原理)。
它会做任何正常功能的高级功能 做不到?
您可以提供一个函数指针作为对一段代码的回调,而这段代码不需要函数的名称来执行调用。其他地方提到的qsort就是一个很好的例子。