C,带参数预设的函数指针

Mik*_*ike 5 c function-pointers

在C中这样的事情可能吗?

#include <stdio.h>

void print_str(char *str) {
        printf(str);
}

int main() {

        void (*f_ptr)() = print_str,"hello world";

        f_ptr();

}

//see "hello world" on stdout
Run Code Online (Sandbox Code Playgroud)

简而言之,我想要一个"存储"参数的函数指针.关键是函数指针可以在以后使用而无需引用原始数据.

我可以使用这样的东西来耦合函数指针和参数引用

struct f_ptr {
 void (*f)();
 void *data;
}

void exec_f_ptr(f_ptr *data) {
  data->f(data->data):
}
Run Code Online (Sandbox Code Playgroud)

但是不会像在里面用参数调用函数指针一样优雅.

Jon*_*pan 3

您基本上是在要求一个闭包而不是一个函数指针——也就是说,数据和代码位于一个“对象”中。这样的对象在标准 C 中不存在——您可以从 Apple 的块或其他语言的匿名函数(或从支持它们的语言中直接的闭包)获得类似的东西,但一般来说您必须构造一些数据类型正如您所发现的,您自己的。