c - 在 C 中使用指向函数的指针调用函数

标签 c function pointers syntax

我想了解指向函数的指针如何工作以及如何在 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");
}

我使用 function();(*function)(); 调用函数 invoked_function,两者都有效。

如果第一个包含invoked_function的内存地址,第二个包含invoked_function代码的第一个字节,为什么两者都有效?

最佳答案

这个:

function = invoked_function;

等同于:

function = &invoked_function;

因为第一个也是有效的,因为标准说这个上下文中的函数名称被转换为函数的地址。

这个:

(*function)();

是使用函数的方式(因为它是一个函数指针)。

但是,请注意:

function()

也被接受,如你所见here .

这背后没有什么黑魔法,C 是这样构造的,函数指针就是这样使用的,这就是语法。

关于c - 在 C 中使用指向函数的指针调用函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46022330/

相关文章:

c - 这个程序中 sockaddr_in 的目的是什么?

c - 有符号整数的算术右移

javascript - .findIndex() 是 JavaScript 中的高阶函数吗?

c - ARM 汇编器: bx jump to nowhere

function - Elixir中直接调用模块函数的defdelegate和def有什么区别

c++ - 对 std::stack 指针调用删除

c - 这个宏有什么问题?

c - 启动应用程序并等待其完成,而不会阻止重绘

python - 耦合 fortran/c++ 与在 python 中调用的指针给出了段错误(核心转储)错误

c++ - 如何在 C++ 中声明外部类指针?