求助:一个函数指针,需要指向多种类型函数,这个指针该怎么定义?

hqx8211 2006-05-31 11:49:01
指向的函数返回值,参数个数,参数类型都各不相同。现在需要定义一个函数指针,各种不同类型的函数地址都可能会赋值给这个指针。请问这个指针该如何定义?
...全文
383 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
hqx8211 2006-06-02
  • 打赏
  • 举报
回复
主要是参数不好搞,个数,类型都不固定。

标准C,所以模板不用考虑。再说模板也不好处理参数个数不固定的情况。

可变参数最少要提供最后一个固定参数(虽然Unix兼容方式可以不提供,但是可移植性太差),但是这些函数的最后一个参数也不相同。所以可变参数也不好实现。

至于返回类型,void *确实可以。其实就直接用int 也没问题,反正能存放32位地址就行,用的时候再强制转换。

最后采用的还是 int (*p_func)(int, char **)形式, 加了一个包装函数,调用的时候统一传入argc, char ** argv, 具体参数解释交给被调用函数自己解释了。

happytang 2006-06-01
  • 打赏
  • 举报
回复
c++中有模板
c中就用void*定义了,然后强制转换类型
zsl6658 2006-06-01
  • 打赏
  • 举报
回复
函数的参数可以使用可变参数,stdarg.h中定义的!返回值也不同我看只能使用void*了!
void (*func)(int argc,char* fmat,...);
CPlusUser 2006-06-01
  • 打赏
  • 举报
回复
是C吧?
你可以定义一个void *。
在具体使用的时候进行强制转型啊。

这个是对的.
需要强制转换.
吃狼的豆腐 2006-05-31
  • 打赏
  • 举报
回复
用宏定义,定义多组函数,类似摸板
jinjiajie 2006-05-31
  • 打赏
  • 举报
回复
模板...
铖邑 2006-05-31
  • 打赏
  • 举报
回复
无法定义
hqx8211 2006-05-31
  • 打赏
  • 举报
回复
我最初的想法是定义一个void (*p_func) (void) , 然后把函数地址直接memcpy 过来。
#define FUNC_LENGTH 4
memcpy(p_func, func_name, FUNC_LENGTH);

当然不一定要 void (*p_func)(void),直接用 int ,unsigned int ,long...什么都行,反正能保存32位地址就行(暂不用考虑16,64位系统)。
这样保存地址确实没问题,强制类型转换,地址直接拷贝都能赋值。问题是调用的时候该怎么做?调用形式又不统一了,而要求是调用形式也统一。

代码要求类似如下:
func_a(xxx);
func_b(xxx);
.... //一堆已有函数的定义,返回值,参数各异

scanf("%c", function_name);

switch(function_name)
{
case 'a': p_func = func_a; //函数func_a 地址赋给函数指针
case 'b': p_func = func_b; //根据输入赋值不同函数地址,简略起见没写break;
.....
}

func_a(???); //调用该怎么写?头痛,如果函数类型单一,那太简单了。。。现在优点不知怎么做,参数怎么传入?因为被调函数都是已经写好的,而且类型乱七八糟什么都有。如果函数都是自己写,还可以统一传入参数结构体。

卡住了,集思广益,再看看大家的回复。
sharpdew 2006-05-31
  • 打赏
  • 举报
回复
unsigned * (void*也行) ,这个问题有点复杂,不过好多人问过了,给你一个例子:
http://blog.csdn.net/sharpdew/archive/2006/05/23/751477.aspx
飞哥 2006-05-31
  • 打赏
  • 举报
回复
我发现现在人问的问题越来越有水平了:)
voidptr:)
template
ywhbn 2006-05-31
  • 打赏
  • 举报
回复
void *pFunc;
赋值时做一下强制类型转换 pFunc = (void *)...
universes 2006-05-31
  • 打赏
  • 举报
回复
是C吧?
你可以定义一个void *。
在具体使用的时候进行强制转型啊。

69,364

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧