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

    一、函数指针

    1. 函数类型:由它的返回类型和形参类型共同决定(与函数名无关)

    2. 示例:

    int fun1(int a, int b)
    {
    	return a + b;
    }
    

    该函数的函数类型为:int (int, int)

    3. 声明一个指向函数的指针:int (*pf)(int, int);

    4. 函数名:作为一个值来使用时,该函数自动转换成指针

    5. 为函数指针赋值:pf = fun1 或 pf = &fun1    //&是可选的,pf指向名为fun1的函数

    6. 为函数指针赋值nullptr:表示该指针没有指向任何一个函数

    二、函数指针作为形参

    1. 形参若是函数类型,会自动转换成指向函数的指针

    2. 对应的实参是函数,函数会被自动转换成指向该函数的指针

    3. 示例:

    void print(int (*pf)(int, int)); 
    void print(int pf(int, int)); 	//形参为函数类型,自动转换成函数指针
    

    4. 简化(类型别名):

    //Func是函数类型 
    typedef int Func(int, int);	
    typedef decltype(fun1) Func; 
    //pFunc是函数指针
    typedef int(*pFunc)(int, int);
    typedef decltype(fun1) *pFunc; 
    

    5. 解读:decltype返回函数类型,此时不会将函数类型自动转换为指针类型,故上面的pFunc前才会加上“*”

    6. 简化示例:

    void print(pFunc); 
    void print(Func); 	//形参为函数类型,自动转换成函数指针 
    

     

    三、返回类型为函数指针

    1. 类型别名法

    using pf = int (*)(int, int);	//pf是函数指针 
    using f = int(int, int);	//f是函数类型 
    pf func(parameter_list);
    f *func(parameter_list);
    

    2. 直接法

    int (*func(parameter_list))(int, int);
    

    3. 尾置返回类型

    auto func(parameter_list) -> int (*)(int, int);
    

    4. 使用decltype

    前提:知道返回的函数是哪一个

    int fun1(int a, int b);
    int fun2(int a, int b);
    //func返回指向fun1或者fun2的指针 
    decltype(fun1) *func(parameter_list);
    

    重申:将decltype作用于某个函数时,它返回函数类型而非指针类型。

    补充:具体返回指向f1的指针还是返回指向f2的指针,根据func函数体内的返回值而定。类似的例子——传说门

  • 相关阅读:
    2015 多校联赛 ——HDU5389(dp)
    spring MVC配置详解
    面试题整理11
    面试题整理09
    Spring和SpringMVC的区别
    SpringMVC01
    js中typeof与instanceof用法小记
    Java 可变参数
    log4j文件的配置
    Hibernate 分组查询 子查询 原生SQL
  • 原文地址:https://www.cnblogs.com/xzxl/p/7665816.html
Copyright © 2011-2022 走看看