我想了解函数指针如何工作以及如何在 C 中调用函数。
在这个例子中:
#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");
}
Run Code Online (Sandbox Code Playgroud)
invoked_function我使用function();和调用该函数(*function)();,两者实际上都有效。
如果第一个包含 的内存地址invoked_function,第二个包含 的代码的第一个字节invoked_function,为什么两者都起作用?
这:
function = invoked_function;
Run Code Online (Sandbox Code Playgroud)
等价于:
function = &invoked_function;
Run Code Online (Sandbox Code Playgroud)
因为第一个也是有效的,因为标准规定此上下文中的函数名称将转换为函数的地址。
这:
(*function)();
Run Code Online (Sandbox Code Playgroud)
是使用该函数的方式(因为它是函数指针)。
但是,请注意:
function()
Run Code Online (Sandbox Code Playgroud)
也被接受,正如您在此处看到的。
这背后并没有黑魔法,C 就是这样构造的,函数指针就是这样使用的,这就是语法。