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函数体内的返回值而定。类似的例子——传说门

  • 相关阅读:
    samtools使用过程中出现的问题
    转移灶,原发灶,cfDNA的外显子测序得到的突变点的关系
    韦恩图的画法
    python的计算保留小数
    awk的输出格式控制:print 和printf
    awk遇到windows 的^M
    从引物序列出发查找pcr产物的内容和在基因组上的位置
    八.Windows内核保护机制--页保护3--PDE PTE属性
    九.Windows内核保护机制--TSS
    七.Windows内核保护机制--陷阱门
  • 原文地址:https://www.cnblogs.com/xzxl/p/7665816.html
Copyright © 2011-2022 走看看