指向函数的指针,重温大一的C知识

//今天看了个tftp的源码,为下面的typedef纠结,还好经过一段时间研究,终于看懂了。下面是学到的东西

 

//首先说明(* CMDFUNC)(char [][256],int pcount)是void,可猜测CMDFUNC是什么,下面会有揭晓

typedef void (* CMDFUNC)(char [][256],int pcount);

 

//定义CMDNUM类型

typedef struct _cmdnum{

char *cmd;

int num;

int paramcount;

CMDFUNC callback;

}CMDNUM,*PCMDNUM;

 

//cmdlist中放了一些东东,函数名是这次要讨论的

CMDNUM cmdlist[] = {

{"help",1,0,showhelp}, 

{"exit",2,0,quit},  

{"get",4,1,getfile}, 

{"put",5,2,putfile},

{"connect",8,1,connectto}};

 

//已有的部分函数

void showhelp(char cmd[][256],int pcount);

void quit(char cmd[][256],int pcount);

void getfile(char cmd[][256],int pcount);

void putfile(char cmd[][256],int pcount);

void connectto(char cmd[][256],int pcount);

 

//程序中最炫的地方,通过这句话,只需要设置num的值就能调用不同函数,当然还有更细节地方,不讨论

cmdlist[num].callback(cmd,pcount-1);//执行相应动作,pcount参数个数,存储在cmd中

 

解读:

num可以是0/1/2/3/4

比如num = 0, cmdlist[0]这个结构被"help",1,0,showhelp填充

cmdlist[0]是CMDNUM型数据

程序中存在showhelp/quit/getfile/putfile/connectto这几个函数,cmdlist[num]中的最后一个参数是函数名,非字符串

cmdlist[0].cmdlist成功的将cmdlist[0]中的函数名变成showhelp函数名,并调用showhelp(char cmd[][256],int pcount)

 

成功原因:

typedef void (* CMDFUNC)(char [][256],int pcount);

CMDFUNC是一个指向(返回值为void,参数为char [][256],int pcount)的函数的指针

cmdlist[num].callback传递给函数的是showhelp函数名,是地址,一个指向函数showhelp的指针

将函数showhelp传过去,然后就Ok了,具体请参考《C程序设计教程》H.M.Deitl/P.J.Deitel 226页,机械工业出版社

使用了函数指针,指向函数的指针,实现了典型下拉菜单的功能,易扩展

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值