c - void * 函数指针

标签 c function pointers

我为一个函数指针创建了一个 typedef,它接受一个整数并返回一个 void *:

typedef void* (*fp)(int index);

然后我制作了一个结构,其中包含一个 fp 和另一个相同类型的结构:

typedef struct fp_holder {
    fp function_pointer;
    iterable *next;
} fp_holder;

我想知道如何在 fp_holder 中调用 fp。

为了对此进行测试,我执行了以下操作:

void *test_fp(int index) {
    if (index == 0) {
        printf('H');
        fflush(stdout);
        return [something_that_works];
    }
    else if (index == 1) {
        printf('e');
        fflush(stdout);
        return [something_that_works];
    }
    else if (index == 2) {
        printf('l');
        fflush(stdout);
        return [something_that_works];
    }
    else if (index == 3) {
        printf('l');
        fflush(stdout);
        return [something_that_works];
    }
    else if (index == 4) {
        printf('o');
        fflush(stdout);
        return [something_that_works];
    }
    else {
        return (void *) NULL;
    }
}

fp_holder *a = (fp_holder *) malloc(sizeof(fp_holder));
a->function_pointer = test_fp;
a->next = NULL;

因此,通过所有这些设置,我尝试通过以下尝试调用 a 的 function_pointer:

a->function_pointer(0);
(*a->function_pointer)(0);
((*)a->function_pointer)(0);

我只是想不通为什么它们不起作用。 帮助将不胜感激! :)

编辑

我想做的是: 使用参数调用 a 的 function_pointer。

我现在将尝试一些答案,看看会发生什么。

编辑2

已回答!我通过执行 a->function_pointer(0) 来调用它是正确的,但是给我一个段错误 [这是我的问题 - 也许我应该澄清这一点] 是 printf 语句而不是我的调用。 printf 需要一个字符串,而不是我输入的字符。

最佳答案

你的原始代码真的可以吗

printf('H');

代替

printf("H");

?

您发布的代码的简化版本,带有正确的 printf 参数:

#include <stdio.h>

typedef void* (*function_pointer_t)(int index);

struct function_holder {
    function_pointer_t callback;
};

void* testFn(int i)
{
    printf("testFn %d\n", i);
}

int main(void) {
    struct function_holder fh = { testFn };
    struct function_holder* fhp = &fh;

    fh.callback = testFn;
    fh.callback(1);
    fhp->callback(2);

    return 0;
}

按预期工作:http://ideone.com/1syLlG

关于c - void * 函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19751015/

相关文章:

c - 无法在 C 中正确使用结构指针

c - 使用缓冲区/动态内存的笔划空间

c - 做 while 循环过早退出

c - fprintf 输出返回不可预测的结果

C define语句函数调用一次还是每次使用宏?

R. 为什么我的函数忽略 1(并正确处理任何数字)?

javascript - 将数组作为参数传递给函数

c - KDevelop4:加载共享库时出错

c++ - 当我从公共(public)成员函数返回引用时,为什么我可以暴露私有(private)成员?

c++ - 为动态二维数组创建正确的复制构造函数