关于函数指针,结构体数组的联合使用

见代码

 1 #include <stdio.h>
  2 typedef int (*Fun)();  //函数指针
  3 struct student
  4 {
  5     int id;
  6     Fun func;   //函数指针,存放的应该是函数的入口地址
  7 };
  8 
  9 int fun1(int a)
 10 {
 11     printf("fun1\n");
 12 }
 13 
 14 int fun2(int a)
 15 {
 16     printf("fun2\n");
 17     printf("a = %d\n",a);
 18     return 0;
 19 }
 20 
 21 int fun3(int b)
 22 {
 23     printf("fun3\n");
 24     return 0;
 25 }
 26 
 27 struct student tab[] =
 28 {
 29     {1,fun1},
 30     {2,fun2},
 31     {3,fun3},
 32     {4,NULL}
 33 //  {5,fun5},
 34 };
 35 
 36 struct student *parse_func(int id)     //通过id找出调用的哪个函数
 37 {
 38     int i;
 39     for(i = 0; i<sizeof(tab)/sizeof(struct student); i++)
 40     {
 41         if(id == tab[i].id)
 42             return &tab[i];          //返回数组地址
 43     }
 44     return NULL;
 45 }
 46 
 47 static int use1(int a)
 48 {
 49     struct student *p = NULL;
 50     p = parse_func(a);
 51     if((p != NULL)&&(p->func != NULL))
 52     {
 53         printf("p->func = %p\n",p->func);
 54         p->func();     //调用该函数
 55 //      p->func(8);  //调用该函数,虽然没有typedef没有定义,但是函数里可以放参数,这行也成立
 56     }
 57 
 58 }
 59 int main()
 60 {
 61     printf("abc\n");
 62     int a = 2;      //a为参数,用于匹配tab数组的id,找到相应函数,通过不同的id参数值调用不同函数
 63     use1(a);
 64 }


运行结果为:

abc
p->func = 0x40057e
fun2
a = 1
 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值