zoukankan      html  css  js  c++  java
  • 函数指针详解

    什么是函数指针

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

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

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

    函数指针定义

    如: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

  • 相关阅读:
    P2604 [ZJOI2010]网络扩容
    P2053 [SCOI2007]修车
    P2045 方格取数加强版
    P4134 [BJOI2012]连连看
    P2153 [SDOI2009]晨跑
    P3381 【模板】最小费用最大流
    P3376 【模板】网络最大流
    P1326 足球
    2020牛客多校第八场I题 Interesting Computer Game(并查集+判环)
    Codeforces 1375D Replace by MEX(思维题)
  • 原文地址:https://www.cnblogs.com/huangsitao/p/11400151.html
Copyright © 2011-2022 走看看