gpt4 book ai didi

c - 如何从 C 中的函数参数中检索函数?

转载 作者:太空宇宙 更新时间:2023-11-04 01:00:44 25 4
gpt4 key购买 nike

我无法从函数参数中获取函数指针。这是我正在尝试做的一个例子。

int a(int I)
{
return I*I;
}

void get_a(int(*R)(int))
{
R = &a;
}

int main()
{
int(*function)(int) = NULL;

printf("function a=%p\n", a);

get_a(function);
printf("function a=%p\n", &function); // Is never the right address.

return 0;
}

网上搜了没用,只能找到pass a function as parameter的例子,所以放弃,自己尝试解决这个问题。

最佳答案

第一个问题是你打印了一个指向function指针的指针,而不是它的值;它永远不会给你正确的地址。

解决了这个问题,剩下的问题是 R 是按值传递的函数指针。 get_a 中对它的任何更改都是函数的局部更改,不会反射(reflect)在 main 中的 function 的值中。

这个问题有两种解决方案:

  • get_a返回函数指针,并在main中赋值给function = get_a(),或者
  • 将指向函数指针的指针传递给 get_a,并通过取消引用进行分配,即使用与非函数指针相同的技术。

这是实现第二种方法的方法:

void get_a(int(**R)(int)) {
*R = a;
}
...
get_a(&function);

Demo.

注意: ISO C 禁止将函数指针转换为 void*,这是用 %p 打印所需要的。不过,我假设您这样做是出于调试目的。

关于c - 如何从 C 中的函数参数中检索函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40663553/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com