zoukankan      html  css  js  c++  java
  • C++ 将函数作为形参

    今天偶然看到一段代码,其中将函数作为形参进行设计,一开始不理解,自己试了一下,发现果然可行

    #include <iostream>
    using namespace std;
    
    void visit(int *p)
    {
        cout << *p << "  ";
    }
    
    void seeAll(int *array, void(* formalParameterFunc)(int *p), int length)
    {
        for (int *p = array; p < array + length; p++)
        {
            formalParameterFunc(p);
        }
        cout << endl;
    }
    
    int main()
    {
        int a[11] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11};
        seeAll(a, visit, sizeof(a)/sizeof(a[0]));
        return 0; 
    }
    //最后输出为 1  2  3  4  5  6  7  8  9  0  11

    seeAll函数设计了三个形参, 其中 void (* formalParameterFunc) (int *p)解释如下:

    1. formalPatameterFunc先与*结合,说明它是个指针
    2. 然后(* formalParameterFunc)与后面的(int *p)结合,说明(* formalParameterFunc)是一个函数,其返回值是void类型

    所以,formalParameterFunc是个指向函数的指针,该被指向的函数的返回值是void,该被指向的函数的形参是int* 类型的变量;在seeAll执行的过程中,需在该位置传入一个满足该要求的函数型实参(本例为visit函数)

    注:seeAll函数中可以设计为不用传入函数实参,使用时直接调用visit即可,本例只是示范“将函数作为形参”这一用法而已,即可将上述的seeAll函数修改如下,可达到一样的效果

    void seeAll(int *array, int length)
    {
        for (int *p = array; p < array + length; p++)
        {
            visit(p);
        }
        cout << endl;
    }
    

     

  • 相关阅读:
    Spring Boot拦截器实现并和swagger集成后使用拦截器的配置问题
    .Net
    Spring+MyBatis实现数据库读写分离方案
    JS通过百度地图API获取当前定位信息
    DevExpress安装说明
    sql server 多行数据合并成一列
    sql数据行转列
    html居中定位
    c#使用多线程的几种方式示例详解
    sql server数据字符串分割功能sql
  • 原文地址:https://www.cnblogs.com/wqpkita/p/7510852.html
Copyright © 2011-2022 走看看