美文网首页
函数指针

函数指针

作者: 贝克街的猫大哥呀 | 来源:发表于2017-08-20 10:57 被阅读0次

    先给个定义

    就是函数的....指针-- 这他妈不废话吗--- 

    就是函数的内存地址!!例如


     //先定义一个函数,显示一个弹窗

    void showMessage(char* title, char* message){

             MessageBox(0,message,title,0);

    }

    void main(){

             void(*fun_p)(char* title, char* message) = showMessage;

             fun_p("标题","测试");

             system("pause");

    }


    关键代码是:void(*fun_p)(char* title, char* message) = showMessage;

    可以看出,这里直接将 showMessage这个函数的地址赋值给了fun_p 这个定义的函数指针

    为什么这里不需要 &showMessage 这样来存地址呢? 其实这样写也行,不写&也行,都是表示的方法的内存地址

    再来看看函数指针是怎么定义的,void表示函数指针的返回值 ,第一个括号里是方法名,第二个括号里是参数名!

    这样调用 fun_p("标题","测试"); 就跟调用showMessage方法一样。

    关键问题来了!函数指针有什么用,看下面的示例:



    int mix(int a,int b){

         return a - b;

    }

    int add(int a,int b){

         return a + b;

    }

    void msg(int(*fun_p)(int a,int b),int m,int n){

         int a=fun_p(m, n);

        printf("最终输出的值:%d", a);

    }

    void main(){

       msg(add,1,2);

       msg(mix, 1, 2);

       system("pause");

    }


    msg方法为关键,里面的参数就是一个函数指针。 这个参数里面,定义了返回值,以及参数。在main方法中,符合这个定义的函数,都可以当成函数指针传进去!! 

    看到msg(add,1,2); 这个方法,将add方法传入,不是传指针吗,怎么直接传了add呢。 这跟上面的问题是一样的。&add也可以,直接输add也行,因为add代表的,就是它本身的内存地址!

    现在就很明显了,这个作用,就相当于JAVA中的,回调!但比JAVA的回调简单多了,因为这里,相当于可以直接传一个函数进去!

    相关文章

      网友评论

          本文标题:函数指针

          本文链接:https://www.haomeiwen.com/subject/mhtfdxtx.html