如何根据char *分配函数指针的地址?

时间:2010-10-16 22:14:57

标签: c function-pointers

我正在编写一个可以简化的C程序,如果我设法做这样的事情:

int (*func)(int);
char* str= "adder";
func = str;
func(2);

我创建了一个函数指针,一个char *,我尝试通过char *将函数的名称赋给指针。在此示例中,adder(int)函数存在。

这实际上可行吗?

我知道这样做的标准方法就是func = adder;,但这不会解决它。

非常感谢!

安东尼奥

4 个答案:

答案 0 :(得分:3)

你制作了这样一张桌子:

static const struct {
    char *name;
    int (*func)(int);
} map[] = {
    { "adder", adder },
    /* ... */
    { 0, 0 }
}

然后使用此代码:

for (i=0; map[i].name && strcmp(map[i].name, str); i++);
if (map[i].func) y = map[i].func(x);
else /* ... */

答案 1 :(得分:2)

这不符合我认为你应该做的事情。如果您设法将"adder"转换为函数指针,那么您将尝试将实际文本作为函数执行,而不是您想要的。你可以保留函数指针的数组,也可以保留文本→函数指针的映射。除此之外,我们还需要有关您正在做的事情的更多信息。

答案 2 :(得分:2)

我知道的最好的方法是将您的函数放在动态库中,并使用dlsym或您的操作系统等效来获取函数指针。或者,您必须以某种方式从字符串到函数指针设置自己的映射。

答案 3 :(得分:1)

你可以使用windows中的dll和getprocaddress函数来完成这样的事情,但是你必须只使用具有相同签名的函数或保留某种类型的精细映射。但是,您要做的却需要额外的基础架构。如果你使用c ++,你可以使用地图来存储字符串和fnptrs之间的关系。