我可以先给void * 分配一个 struct (里面有一个函数),然后触发它们里面的函数吗?

struct func {
    void (*fp)(); // this is a function
};

struct thread{
    void *stack; // I'm gonna use this to store 'struct func' above
};

void assign(struct thread *t,void *f()){
    struct func *task = (struct func *)malloc(sizeof(struct func));
    task->fp = f;
    t->stack = task;
    
    // question: now I want to call the function inside func and deeper inside void*
    // I mean: trigger the function fp()
    t->stack->fp(); // error here

}

推荐答案

stack成员具有类型void *,因此不能按原样取消引用.

在取消引用之前,首先需要将其强制转换为正确的指针类型(或分配给该类型的指针).

((struct func *)t->stack)->fp();
// or
struct func *f = t->stack;
f->fp();

C++相关问答推荐

变量>;-1如何在C中准确求值?

模拟shell并运行.sh文件

使用C时,Windows CMD中的argc参数是否包含重定向命令?

LONG_DOUBLE_T是否存在(标准C:C23)

在C++中访问双指针

什么是.c.h文件?

有什么方法可以将字符串与我们 Select 的子字符串分开吗?喜欢:SIN(LOG(10))

如何在GDB中查看MUSL的源代码

C堆栈(使用动态数组)realloc内存泄漏问题

错误...的多个定义(&Q)首先在这里定义&

仅从限制指针参数声明推断非混叠

使用ld将目标文件链接到C标准库

C:如何将此代码转换为与数组一起使用?

有没有一种方法可以用C创建保留限定符的函数?

用于计算位数和的递归C函数

为什么会出现此错误?二进制表达式的操作数无效

C中的数组下标和指针算法给出了不同的结果

如何编写postgresql支持函数

'printf("%s", user_input)' 危险吗?

如何让 unlinkat(dir_fd, ".", AT_REMOVEDIR) 工作?