• 指向函数的指针函数指针/指针函数返回指针的函数


    函数指针:顾名思义就是函数的指针,由函数修饰,说明这是一个指向函数的指针。

    函数指针的应用:可以通过函数指针变量方便的调用功能不同的函数。

    上代码:

    代码一:

     1 #include <iostream>
     2 using namespace std;
     3 
     4 void Func1(int);
     5 void Func2(int);
     6 void Func3(int);
     7 typedef void (*FuncType)(int);//定义函数指针类型
    8 void CallFunc(FuncType fc, int); 9 10 11 int main(void) 12 { 13 CallFunc(Func1,10); 14 CallFunc(Func2,20); 15 CallFunc(Func3,30); 16 cout<<endl<<endl; 17 } 18 19 void Func1(int x) 20 { 21 cout<<"func1: "<<x<<endl; 22 } 23 24 void Func2(int x) 25 { 26 cout<<"func2: "<<x<<endl; 27 } 28 29 void Func3(int x) 30 { 31 cout<<"func3: "<<x<<endl; 32 } 33 34 void CallFunc(FuncType fc, int x) 35 { 36 fc(x); 37 }

    代码二:

    定义函数指针变量(全区变量VS局部变量)

     1 void MyFun(int );
     2 typedef void (*FuncType)(int);//函数指针类型
     3 FuncType FunP;//函数指针全局变量
     4 
     5 int main(void)
     6 {
     7     FuncType FunP;
     8     MyFun(10);
     9     FunP=&MyFun;//也可以改为FunP=MyFun;
    10     (*FunP)(10);//可以改为FunP(10);
    11     cout<<endl<<endl;
    12     return 0;
    13 }
    14 
    15 void MyFun(int x)
    16 {
    17     cout<<x<<endl;
    18 }

    =============================================================

    其实函数名本身也是一个指针类型,只不过是一个指针常量。根据代码二总结如下:

    1)其实,MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。 MyFun 函数名是一个函数指针常量,而 FunP 是一个函数数指针变量,这是它们的关系。

    2)但函数名调用如果都得如(*MyFun)(10)这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10)这种形式地调用(这样方便多了并与数学中的函数形式一样,不是吗?)。

    3)为统一起见,FunP函数指针变量也可以FunP(10)的形式来调用。

    4)赋值时,即可FunP = &MyFun形式,也可FunP = MyFun

    -----------------------------------------------------------------------------------------------------------------

    指针函数:由指针修饰,说明这是一个返回指针的函数.比较容易理解。

  • 相关阅读:
    html JS 打开本地程序及文件
    [转]jquery mobile中redirect重定向问题
    kafka中broker、producer、consumer主要配置参数说明
    手写一个LruCache
    ES发布时max virtual memory areas vm.max_map_count [65530] is too low, increase to at least [262144] 错误
    UML类图
    JVM调优总结
    JVM学习系列(五) 常见的JVM参数
    JVM学习系列(四) 相关概念
    JVM学习系列(三) 虚拟机监控相关
  • 原文地址:https://www.cnblogs.com/sjlove/p/3060908.html
Copyright © 2020-2023  润新知