• 函数指针详解


    什么是函数指针

    函数指针,即指向函数的指针。

    如果在程序中定义了一个函数,在编译时系统就会为这段函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址,而且函数名表示的就是这个地址。

    既然是地址我们就可以定义一个指针变量来存放,这个指针变量叫做函数指针变量,简称函数指针

    函数指针定义

    如:void fun(int i){},其类型为void (),定义指向该函数的指针为void (*p)(int i) = fun;

    所以函数指针的定义方式为

    函数返回值类型 (*指针变量名)(函数参数列表);

    注意:*指针变量名两边的括号不能省略,如果省略了括号,就不是定义函数指针,而是一个函数声明了,即声明了一个返回值类型为指针的函数。

    使用函数指针调用函数

    如定义void (*p)(int i) = fun,调用fun函数:(*p)(10);

    函数指针数组

    既然函数入口地址是一个指针,那么就可以将函数指针放入指针数组中,然后作为函数指针调用。

     1 int add1(int a1, int a2);
     2 int add2(int a1,int a2);
     3 int main(void)
     4 {
     5     int numa1 = 1,numb1 = 2;
     6     int numa2 = 2, numb2 = 3;
     7     int(*op[2])(int a, int b);
     8     op[0] = add1;
     9     op[1] = add2;
    10     op[0](numa1,numb1);
    11     op[1](numa2,numb2);
    12 }
    13  
    14 int add1(int a1, int a2)
    15 {
    16     Return a1 + b1;
    17 }
    18  
    19 int add2(int a2, int b2)
    20 {
    21     Return a2+b2;
    22 }

    赋值

    函数指针数组赋值有两种方式:静态定义和动态赋值

    静态定义

    在定义函数指针数组的时候,已经确定了每个成员所对应的函数,如:

    1 Void(*Array[])(void)={Stop,Run,Jump};
    2 Array[1]();//执行Run函数

    动态赋值

    预先定义一个函数指针数组,在需要的时候为其赋值

    1 typedef void(*Funcint)(void);
    2 Funcint Array[32];
    3 Array[10]=INT_TIMER0;
    4 Array[10]();

    参考

    c.biancheng.net/view/228.html

    baike.baidu.com/item/函数指针/2674905?fr=aladdin

  • 相关阅读:
    bzoj2888: 资源运输
    [ SDOI 2009 ] HH的项链 & [ HEOI 2012 ] 采花
    [ POI 2017 ] Podzielno
    [ HAOI 2011 ] Problem A
    [ SDOI 2011 ] 打地鼠
    [ SCOI 2007 ] Perm
    [ POI 2011 ] Dynamite
    [ BZOJ 3038 & 3211 / SPOJ GSS4 ] 上帝造题七分钟2 / 花神游历各国
    [ BZOJ 3445 ] Roadblock
    [ ZJOI 2006 ] Mahjong
  • 原文地址:https://www.cnblogs.com/huangsitao/p/11400151.html
Copyright © 2020-2023  润新知