我想了解指向函数的指针是如何工作的以及如何在C中调用函数。
在这个例子中:
error C2137: empty character constant
error C2001: newline in constant
我使用#include <stdio.h>
void invoked_function();
int main(void) {
void(*function)();
function = invoked_function;
function(); //First way to call invoked_function
(*function)(); //Second way to call invoked_function
return 0;
}
void invoked_function() {
printf("Hi, I'm the invoked function\n\n");
}
和invoked_function
调用函数function();
,两者都有效。
如果第一个是(*function)();
的内存地址,第二个包含invoked_function
代码的第一个字节,为什么两者都有效?
答案 0 :(得分:3)
此:
function = invoked_function;
相当于:
function = &invoked_function;
因为第一个也是有效的,因为标准表示此上下文中的函数名称被转换为函数的地址。
此:
(*function)();
是使用该函数的方法(因为它是一个函数指针)。
然而,请注意:
function()
也被接受了,你可以看到here。
这背后没有黑魔法,C就像这样构造,函数指针就像这样使用,这就是语法。