在C中分配函数指针的传统方法是什么

时间:2017-09-13 04:37:21

标签: c pointers

假设我有一个函数指针,为它分配函数的常规方法是什么?

void (*myFunc)(void*)

1)使用&获取函数的地址,并取消引用调用。

myFunc = &function;

(*myFunc)(input);

或者

2)直接使用函数名称,并在不解除引用的情况下调用。

myFunc = function;

myFunc(input);

1 个答案:

答案 0 :(得分:3)

无论如何,函数都会衰减到函数指针。与所有无关紧要的事情一样,选择一个并坚持下去。

此外,如果您使用(*myFunc)(input)获取功能,则无法使用&function调用功能。使用myFunc = &function获取函数指针,然后编写myFunc(input),或者使用myFunc = function获取函数指针,然后编写(*myFunc)(input),就没有根本问题。

有趣的事实:语言从不将函数调用视为对函数值的调用。函数总是经历衰减到函数指针类型,函数指针是被调用的函数。换句话说:

puts("hello world!");

implicitly converted to

((int (*)(const char*))&puts)("hello world!");

所以(*myFunc)(input)同样会解析为((void (*)(int))&*myFunc)(input),这看起来有点傻,但除非你非常关心程序的抽象语法树视图,正如我们之前所说,它不会没关系它完全一样。