转载的:https://blog.csdn.net/dmc111qwf/article/details/80200868
#include <stdio.h>
#include <string.h>
typedef void (*poniter_fun)(int); //定义一个函数指针
typedef struct poniter_desc {
char *name;
poniter_fun fp;
} poniter_desc,*p_poniter_desc;
poniter_desc poniter_array[10];
p_poniter_desc p_poniter_array;
int register_fun(char *name,poniter_fun fp) //注册函数
{
int i;
for(i=0;i<10;i++)
{
if(!poniter_array[i].fp)
{
poniter_array[i].name=name; poniter_array[i].fp=fp;
return 0;
}
}
return -1;
}
int unregister_fun(char *name,poniter_fun fp) //注销函数
{
int i;
for(i=0;i<10;i++)
{
if(!strcmp(poniter_array[i].name,name))
{
poniter_array[i].name=NULL;
poniter_array[i].fp=NULL;
return 0;
}
} return -1;
}
void run(void) //调用
{
poniter_array[0].fp(1);
poniter_array[1].fp(2);
}
void first(int i)
{
printf("this is first fun%d \r\n",i);
}
void second(int i)
{
printf("this is second fun%d \r\n",i);
}
void main()
{
register_fun("first",first); //将函数加入注册函数
register_fun("second",second);
run();
}