不定参数的函数指针如何定义??

yan119760463 2010-09-13 11:30:11
我想定义一张函数指针表,但是这些函数的参数又是不确定的,数目有变化,那我该如何定义一个不确定参数的函数指针呢??

我在网上一篇文章看到这个:
注意: int (*pfunc)()与int (*pfunc)(void)不是一回事,后者不允许接受任何参数。
难道int (*pfunc)()可以接受多个参数???
...全文
2340 20 打赏 收藏 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
旭子 2010-09-19
  • 打赏
  • 举报
回复
void (*funcp)(int , ...);
pengzhixi 2010-09-14
  • 打赏
  • 举报
回复
#include <iostream>
using namespace std;

typedef void (*FUN)(...);

void fun(...){}

int main(){
FUN ptr=fun;

system("pause");
return 0;
}
昵称很不好取 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yan119760463 的回复:]
我知道怎么回事了,函数本体的声明就应该有... 函数指针的声明也要...
还有个问题比如 int func(int a, ... ) 省略号后面的参数是不是全为int了??
[/Quote]
可以为其他的,可以google 变参函数,看下变参函数原理,我在网上搜了一个变参函数,改了下,希望能有所帮助。
睡觉了。。。
#include<stdlib.h>
#include <stdio.h>
#include <stdarg.h>

typedef void (*FUN)(int,...);

void tVarArg(int num,...)
{
va_list argp;
va_start(argp,num);
while(--num>=0)
printf("%s",(va_arg(argp,char*)));
va_end(argp);
return ;
}

int main(){
FUN fp = tVarArg;
fp(2,"hello ","world\n");
system("pause");
return 0;
}
Csuxiaowu 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 yan119760463 的回复:]

我知道怎么回事了,函数本体的声明就应该有... 函数指针的声明也要...
还有个问题比如 int func(int a, ... ) 省略号后面的参数是不是全为int了??
[/Quote]
不是 可以用其他的
昵称很不好取 2010-09-14
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 yan119760463 的回复:]
这段代码直接用的printf,那我要是想定义多个int型的参数呢?
[/Quote]
我那个FUN定义是按printf声明的函数参数格式写的,要定义int型参数,得根据你定义的函数参数改写,原来可变参数函数是怎么声明的,就怎么写
haow85 2010-09-14
  • 打赏
  • 举报
回复
http://baike.baidu.com/view/1604730.htm
白云飘飘飘 2010-09-14
  • 打赏
  • 举报
回复 1
int (*pfunc)()与int (*pfunc)(void)
C语言中前者表示不定参数,后者表示无参数
C++都表示无参数
taodm 2010-09-14
  • 打赏
  • 举报
回复
楼主方向性错误。
不要用自己的“错误解决方案”替代原始需求。
你不需要不定参数的函数指针。
yan119760463 2010-09-13
  • 打赏
  • 举报
回复
我知道怎么回事了,函数本体的声明就应该有... 函数指针的声明也要...
还有个问题比如 int func(int a, ... ) 省略号后面的参数是不是全为int了??
Csuxiaowu 2010-09-13
  • 打赏
  • 举报
回复
回答你前面的问题
-----------------------
验证一下
C风格的 在声明函数指针的时候可以不加参数的
C++风格的需要
貌似带默认参数的也是不行的 需要加上参数
我用VS2005 和GCC搞的
yan119760463 2010-09-13
  • 打赏
  • 举报
回复
typedef int (*FUN)(const char*,...);

void func(FUN fp){
fp("hello world\n");
}

int main(){
func(printf);

system("pause");
return 0;
}
------------------------------------------------
恕小弟愚钝,这段代码直接用的printf,那我要是想定义多个int型的参数呢? 我用...作为不定形参就报错 VC++6
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 yan119760463 的回复:]
哦~原来如此 谢谢了 但是主要的问题:如何定义不定参数的函数指针? 或者按沙发说的 不必定义 如何做到?
[/Quote]
void f(...)中间用...,就表示参数不定
昵称很不好取 2010-09-13
  • 打赏
  • 举报
回复
和定义普通参数函数的函数指针一样,只是把参数换成不定的就好了
不必定义我不知道怎么弄
yan119760463 2010-09-13
  • 打赏
  • 举报
回复
哦~原来如此 谢谢了 但是主要的问题:如何定义不定参数的函数指针? 或者按沙发说的 不必定义 如何做到?
昵称很不好取 2010-09-13
  • 打赏
  • 举报
回复
举个例子,传入不定参数函数printf
typedef int (*FUN)(const char*,...);

void func(FUN fp){
fp("hello world\n");
}

int main(){
func(printf);

system("pause");
return 0;
}
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 namelij 的回复:]
int (*pfunc)()与int (*pfunc)(void)不是一回事,后者不允许接受任何参数。

int (*pfunc)()可以接受 如 int f(int i=0);
pfunc pf = f...
[/Quote]
int (*pfunc)(void)就不能接受有默认参数的
  • 打赏
  • 举报
回复
int (*pfunc)()与int (*pfunc)(void)不是一回事,后者不允许接受任何参数。

int (*pfunc)()可以接受 如 int f(int i=0);
pfunc pf = f...
yan119760463 2010-09-13
  • 打赏
  • 举报
回复
@_@给个答案啊大哥 你的头像和我QQ头像一样 喜欢这专辑
Csuxiaowu 2010-09-13
  • 打赏
  • 举报
回复
可以不必指定参数

65,213

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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