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

    1.函数指针的使用

    int fun(int a,int b);         //声明一个函数
    int (*p)(int,int)             //定义函数指针,p是一个函数指针,最前面的int是所指函数的返回值类型,后面括号里是该函数的参数类型
    //给函数指针赋值
    p=fun;                 //p指向名为fun的函数
    p=&fun;              //和p=fun等价
    //函数调用的几种等价形式
    int a=p(1,2);
    int b=(*p)(1,2);
    int c=fun(1,2);

    2.函数指针定义的几种形式

    定义指向int fun(int a,int b)的函数指针

    1)直接定义:

    int (*p)(int,int);

    p=fun;   //或p=&fun

    2)使用typedef定义类型别名:

    //p1,p2是函数指针类型

    typedef  int (*p1)(int,int);

    typedef decltype(fun) *p2;

    p1 f1=fun;                   //这里p1是函数指针类型别名,需要定义具体函数指针对象f,f是指向函数的指针

    p2 f2=fun;                   //同上

    //这里p1,p2是函数类型

    typedef int p1(int,int);

    typedef decltype(fun) p2;

    p1 *f1=fun;           //f1是函数指针

    p2 *f2=fun;           //f2是函数指针

    3)使用using定义类型别名

    using p1=int (*)(int,int);           //p1是函数指针类型

    using p2=int(int,int);              //p2是函数类型

    p1 f1=fun;                              //f1是函数指针

    p2 *f2=fun;                             //f2是函数指针

    3.函数指针形参

    1)函数名做形参,函数名会自动转换成函数指针

    #include <iostream> 
    using namespace std;
    int sum(int a,int b)
    {
        return a+b;
    }
    
    void fun(int(*p)(int,int))
    {
        cout << p(2, 3) << endl;
    }
    
    int main(int argc,char *argv[])
    {    
        fun(sum);                         //sum自动转换成函数指针
        return 1;
    }

    2)定义函数类型别名

    #include <iostream> 
    using namespace std;
    int sum(int a,int b)
    {
        return a+b;
    }
    typedef int f(int, int);                
    void fun(f p)                                 //f是函数类型,做形参自动转换成函数指针类型
    {
        cout << p(2, 3) << endl;
    }
    
    int main(int argc,char *argv[])
    {    
        fun(sum);                          //这里sum转换成函数指针
        return 1;
    }

    3)定义函数指针别名

    #include <iostream> 
    using namespace std;
    int sum(int a,int b)
    {
        return a+b;
    }
    typedef int(*f)(int, int);                   
    void fun(f p)                                //f是函数指针类型,p是函数指针
    {
        cout << p(2, 3) << endl;
    }
    
    int main(int argc,char *argv[])
    {        
        fun(sum);                 //sum自动转换成函数指针
        return 1;
    }

    4.返回指向函数的指针

    1)直接定义

    int (*f(int))(int,int)     //f(int) 是函数名和形参列表,返回值类型是int(*)(int,int)

    2)采用尾置返回方式

    auto f(int)->int(*)(int,int)                

    3)使用类型别名定义函数指针类型

    tpyedef int(*p1) (int,int);
    using p2=int(*)(int,int);
    typedef int p3(int,int);
    using p4=int(int,int);
    //等价声明
    p1 f(int);
    p2 f(int);
    p3 *f(int);
    p4 *f(int);
  • 相关阅读:
    Java vs C++ 基础异同比较
    2. 数组
    1. 数据结构概述
    动态规划专题:LeetCode 完全平方数
    动态规划专题:LeetCode 乘积最大子数组
    动态规划专题:LeetCode连续数列
    动态规划专题:LeetCode 按摩师
    3. 无重复字符的最长子串
    字典树(前缀树/后缀树)
    10. 排序算法思想概述及总结(精华)
  • 原文地址:https://www.cnblogs.com/mrlsx/p/5554820.html
Copyright © 2011-2022 走看看