当前位置 博文首页 > 盾牌座UY:函数指针

    盾牌座UY:函数指针

    作者:盾牌座UY 时间:2021-01-28 16:11

    1,明确相关概念

    a,指针函数:一个函数,只是返回值是一个指针,eg: int *add(int a ,int b)

    b,函数名就是整个函数里面代码的首地址

    int add(int a,int b)

    {

      printf("%d\n",a);

      print("%d\n",b);

      return a + b;

    }

    add 函数名就是整个函数add的首地址,就是三条语句的首地址,等于printf("%d\n",a);的首地址

    2,函数指针概念:本质是一种程序员自己定义的数据类型(跟int,结构体数据类型一样),它保存着一个函数的地址

    3,函数指针数据类型声明的语法:(不会分配内存,大型程序写于头文件)

      语法: 返回值数据类型(*函数指针名)(形参表)

      eg:int (*pfunc)(int a,int b);//pfunc就是一种数据类型,当成int类型来用

      or eg:typedef int (*pfunc_t)(int a,int b);//对函数指针取别名pfunc_t(建议方法)

    4,函数指针变量定义语法格式:函数指针名 函数指针变量;

      eg:pfunc_t pfunc;//pfunc就是一个函数指针变量,将来保存函数地址

    5,函数指针变量初始化

      pfunc_t pfunc = add;//定义、初始化函数指针变量,指向add

    6,通过函数指针变量来访问指向的函数,通过函数指针变量调用指向的函数

      语法:函数指针变量名(实参表);

     //实例:

    #includ<stdio.h>

    typedef (*pfunc_t)(int a,int b);

    int add(int a,int b)//定义加法函数

    {

      return a + b;

    }

    int sub(int a,int b)//定义减法函数

    {

      return a -b;

    }

    void main(void)

    {

      int ret = 0;

      pfunc_t pfunc = NULL;//定义函数指针变量且初始化为空

      pfunc = add;//把add函数的地址保存于函数指针变量pfunc

      ret = pfunc(100,200);调用add函数

      printf("a + b = %d\n",ret);

      func = sub;///把sub函数的地址保存于函数指针变量pfunc

      ret = pfunc(100,200);//调用sub函数

      printf("a + b = %d\n",ret);

    }

    下一篇:没有了