zoukankan      html  css  js  c++  java
  • 十六、函数指针初级(函数指针与函数调用)

    1.函数指针
    ①函数在内存中也是有地址的。函数名代表函数的内存地址
    ②函数指针是指向函数的指针变量
    ③函数存放在代码区
    ④函数指针定义与函数声明很相似
    函数声明:int maxValue(int x , int y);
    函数指针定义:int (*p)(int x , int y);
    ⑥函数指针剖析
    int (*p)(int x , int y)
    变量定义三部分:
    类型:int (*)(int x , int y)
    变量名:p
    初值:NULL
    ⑦函数的地址已经固定了,但是指针变量的地址可以来回改变
    ⑧函数指针定义
    《1》通常使用typedef来定义函数指针类型
    《2》typedef int(*PFUN)(int x , int y);//形参可以省略
    《3》PFUN是typedef后的新类型名
    《4》PFUN p = NULL;
    《5》类型 变量 初值
    ⑨函数指针赋值
    《1》p = maxValue;//之后p可以当maxValue用
    《2》函数名代表函数的入口地址
    《3》给函数指针赋值的函数,应该和函数指针定义的函数原型是一致的
    ⑩示例:
    typedef int(*PFUN)(int , int);
    //相当于把int (*)(int , int)改成PFUN
    int sum(int a , int b );
    int sum(int a , int b ){//加法函数
         return a+b;
    }
    int maxValue(int x , int y);
    int maxValue(int x , int y){//最大值函数
         return x>y?x:y;
    }
    int main(){
         PFUN p1 = sum;//定义一个指针变量p1,并过去sum地址
         
         int (*p)(int a , int b );
         p = sum;//指针变量p获取sum地址
         
         int x = p(30,20);
         printf(“%d ”,x);
     
         p = maxValue;//同一类型指针变量可以获得多个函数地址
         printf(“%d”,p(100,30));
    }
    2.函数回调
    ①回调函数(callback):回调函数是一个函数,它由调用方自己实现,供被调方调用的函数
    ②函数回调是一种非常灵活的设计模式,实际应用非常广。
    ③回调函数 核心 函数指针作为参数
    示例:
    int revalue(int a , int b , int(*p)(int , int));
    使用:
    int m = getValue(3,5,maxValue);//m是5
    ④示例:
    typedef int(*PFUN)(int , int);
    //相当于把int (*)(int , int)改成PFUN
    int sum(int a , int b );
    int sum(int a , int b ){//加法函数
         return a+b;
    }
    int maxValue(int x , int y);
    int maxValue(int x , int y){//最大值函数
         return x>y?x:y;
    }
    int minus(int x , int y);
    int minus(int x , int y){//减法函数
         return x-y;
    }
    int getValue(int x , int y , PFUN p);
    int getValue(int x , int y , PFUN p){//回调函数
         return p(x , y);
    }
    int main(){
         int a = getValue(10 , 20 , maxValue);//求最大值
         int b = getValue(100 , 50 , sum);//求和
         int c = getValue(40 , 5 , minus);//求减
         printf(“%d %d %d ”,a,b,c);
    }
  • 相关阅读:
    关于WP7的Loaded事件[转]
    皮皮书屋的变态验证码
    近期学习内容for mobile
    一个js问题引发的同时吐槽
    powerdesigner 概念模型转物理模型时的丢表问题
    偶的处女文近期学习计划
    web布局实现圆角,兼容所有的浏览器
    最近面试asp.net碰到的一些题
    网站推广心得
    兼容ie6的png格式图片的背景透明问题
  • 原文地址:https://www.cnblogs.com/gnhxsk/p/5170676.html
Copyright © 2011-2022 走看看