假设我有一个函数指针,为它分配函数的常规方法是什么?
void (*myFunc)(void*)
1)使用&获取函数的地址,并取消引用调用。
myFunc = &function;
(*myFunc)(input);
或者
2)直接使用函数名称,并在不解除引用的情况下调用。
myFunc = function;
myFunc(input);
答案 0 :(得分:3)
无论如何,函数都会衰减到函数指针。与所有无关紧要的事情一样,选择一个并坚持下去。
此外,如果您使用(*myFunc)(input)
获取功能,则无法使用&function
调用功能。使用myFunc = &function
获取函数指针,然后编写myFunc(input)
,或者使用myFunc = function
获取函数指针,然后编写(*myFunc)(input)
,就没有根本问题。
有趣的事实:语言从不将函数调用视为对函数值的调用。函数总是经历衰减到函数指针类型,函数指针是被调用的函数。换句话说:
puts("hello world!");
((int (*)(const char*))&puts)("hello world!");
所以(*myFunc)(input)
同样会解析为((void (*)(int))&*myFunc)(input)
,这看起来有点傻,但除非你非常关心程序的抽象语法树视图,正如我们之前所说,它不会没关系它完全一样。