C语言中使用函数指针调用函数

4 c syntax pointers function

我想了解函数指针如何工作以及如何在 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,为什么两者都起作用?

gsa*_*ras 5

这:

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 就是这样构造的,函数指针就是这样使用的,这就是语法。