C++把函数名作为参数传递给函数

C++把函数A作为参数传递给另外函数B时,实际上是把函数A作为指针传递给另外的函数B,这就涉及到了函数指针。

1.函数指针

函数指针声明如下:

return_type (*p_name)(arg_list);
//表示返回值为return_type,参数列表为arg_list的函数指针p_name.

例如:

//定义一个函数int add(int a,int b)
{
    return a+b;
}
int (*pfun)(int,int);//声明一个函数指针
pfun = add;//使用函数指针指向一个函数,此处是函数名

注意:函数指针的参数类型和返回类型必须与指向的函数参数类型返回类型一致

2.使用函数指针代替函数使用

int res = pfun(1,2);//使用函数指针调用函数add

3.函数指针作为函数参数传递

函数A作为参数传递给函数B时,函数B声明如下:

int A(int a,int b);

B(arg_list,int (*pA)(int, int));

函数B调用如下:

B(...,A);

例子:

int CmpAsc(int x, int y)
{
    //如果x>y返回1,否则返回0;
    if(x>y)return 1;
    else return 0;
}
void sort(int a[], int n, int (*cmp)(int,int))//最后一个参数为函数指针类型参数
{
    /*对数组a排序,排序原则由cmp指定,若cmp为真,表示两元素逆序*/
    for(int i=0;i<n-1;i++)
        for(int j=i+1;j<n;j++)
            if(cmp(a[i],a[j]))//调用传进来的函数指针
                swap(a[i],a[j]);
}

int main(int argc, const char * argv[]) {
    // insert code here...

    int a[6] ={8,2,1,3,4,5};
    sort(a, 6, CmpAsc);//CmpAsc函数名作为参数传递给函数sort
    for(auto &e:a)
        cout<<e<<" ";
    return 0;
}

原文地址:https://www.cnblogs.com/jainszhang/p/10704514.html

时间: 2024-08-02 07:13:30

C++把函数名作为参数传递给函数的相关文章

C#.NET常见问题(FAQ)-如何把函数名作为参数传递给另一个函数

在主窗体中使用的还是普通的函数,但是test函数有一个新的参数,就是method ? 这个method所指向的就是前面委托定义的method ? ? 更多教学视频和资料下载,欢迎关注以下信息: 我的优酷空间: http://i.youku.com/acetaohai123 ? 我的在线论坛: http://csrobot.gz01.bdysite.com/ ? 问题交流: QQ:910358960 邮箱:[email protected] ?

java如何将函数名作为参数传递

采用lambda表达式: import java.util.function.Function; class Test { public static void main(String... args) { Function<Integer, Integer> increase = e -> e + 7; // lambda表达式 System.out.println(increase.getClass()); funcPlus(3, increase); } public static

C语言中数组名作为参数进行函数传递

用数组名作函数参数与用数组元素作实参有几点不同. 1) 用数组元素作实参时,只要数组类型和函数的形参变量的类型一致,那么作为下标变量的数组元素的类型也和函数形参变量的类型是一致的.因此,并不要求函数的形参也是下标变量.换句话说,对数组元素的处理是按普通变量对待的.用数组名作函数参数时,则要求形参和相对应的实参都必须是类型相同的数组,都必须有明确的数组说明.当形参和实参二者不一致时,即会发生错误. 2) 在普通变量或下标变量作函数参数时,形参变量和实参变量是由编译系统分配的两个不同的内存单元.在函

php函数间的参数传递(值传递/引用传递)

php:函数间的参数传递 1.值传递 代码如下: <?php function exam($var1){ $var1++: echo "In Exam:" . $var1 . "<br />"; } $var1 = 1; echo $var1 . "<br />"; exam($var1); echo $var1 . "<br />"; ?> ------------------

函数嵌套和函数名作参数结合使用

将子函数名作为参数存储起来,再次调用这个函数时,仍然保存着上层函数的参数 存储子函数的操作在上层函数中,传入的时候子函数可以没有参数,调用时再添加参数 越说越乱直接上demo 1 a=[] 2 def adda(a1,a2): 3 def addb(a3): 4 print('--') 5 return a1+a2+a3 6 a.append(addb) 7 print('++') 8 adda('123','456') 9 print(a) 10 for aa in a: 11 aa('a3'

小猪猪C++笔记基础篇(六)参数传递、函数重载、函数指针、调试帮助

小猪猪C++笔记基础篇(六) ————参数传递.函数重载.函数指针.调试帮助 关键词:参数传递.函数重载.函数指针.调试帮助 因为一些事情以及自己的懒惰,大概有一个星期没有继续读书了,已经不行了,赶紧写一篇压压惊.把我文章抱走的同学留个言嘛. 函数在变成里面是一个非常重要的组成部分,那么这一部分我们先简单的介绍一下参数是如何传递进入函数,函数如何返回结果的.然后我们再来看看函数重载是个什么样的机制,最后在介绍一下所谓的函数指针到底是个什么东西.那么直接开始正题吧: 一.函数的参数传递 我们知道函

247 高阶函数 之 函数可以作为参数传递

高阶函数:就是对其他函数进行操作的函数,它接收函数作为参数,或将函数作为返回值输出. 此时fn 就是一个高阶函数. 函数也是一种数据类型,同样可以作为参数,传递给另外一个参数使用,最典型的就是作为回调函数. 同理函数也可以作为返回值传递回来. <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewpo

【函数】02、匿名函数、生成器、高阶函数

一.匿名函数 1.定义 语法格式: lambda args:expression args:以逗号分隔的参数列表 expression:用到args中各参数的表达式 lambda定义的代码必须是合法的表达式,不能出现多条件语句(可使用if的三元表达式)和非表达式,如for和while等 lambda的首要用途是指定短小的回调函数 lambda将返回一个函数而不是将函数赋值给某变量名 In [77]: lambda x: x+1 Out[77]: <function __main__.<lamb

文成小盆友python-num3 集合,函数,-- 部分内置函数

本接主要内容: set -- 集合数据类型 函数 自定义函数 部分内置函数 一.set 集合数据类型 set集合,是一个无序且不重复的元素集合 集合基本特性 无序 不重复 创建集合 #!/bin/env python s1 = {"1","2","3","4"} ##或者 s2 = set() set 提供的功能 1 class set(object): 2 """ 3 set() -> n