函数指针、回调、动态排序、返回函数指针

1、函数指针定义及初始化:

int (*p)(int,int)=NULL;

p=maxValue;//将函数maxValue的地址传给p

(*p)=maxValue;

2、函数回调:

int getValue(int a,int b,int (*p)(int,int));//函数指针作为getValue的参数

函数指针指向函数可变

3、动态排序(排序条件多变)

将决定排序方式的条件封装成函数,然后再回调

typedef BOOL (*P_Fun)(int,int);//头文件#include <stdbool.h>

void sortArray(int *arr,int count,P_Fun p);

4、函数返回值是函数指针

P_Fun getFunctionByName(char *name)

通过功能名称查找对应的函数

NameFunctionList list[]={
    {"max",maxValue},
    {"min",minValue},
    {"avg",avgValue},
    {"sum",sumValue},
    {"mul",mulValue}
};
P_FUN getFunctionByName(char *name)
{
    for (int i=0; i<(sizeof(list)/sizeof(list[0])); i++)
    {
        if (!strcmp(list[i].name, name))
        {
            return list[i].function;
        }
    }
    return maxValue;
}

时间: 2024-10-25 08:10:11

函数指针、回调、动态排序、返回函数指针的相关文章

设计一个函数,它接受不定数量的参数,这是参数都是函数。这些函数都接受一个回调函数作为参数,按照回调函数被调用的顺序返回函数名

function acceptFuncs() { var fnNames = []; //定义数组字面量,用来保存函数名称 for (var i = 0; i < arguments.length; i++) { //for循环检测接收到的每个参数是否为函数,是则传递回调函数给它,最后所结果压入数组中 if (typeof arguments[i] === "function") { fnNames.push(arguments[i](callback)); } } for (v

函数返回局部指针变量是否可行?

我们大家都知道指针函数的返回指针不能指向函数内的自动变量,如果需要返回函数的内部变量的话,就需要将该变量声明为静态变量.为什么函数能够返回 静态变量的地址而不能返回局部自动变量的地址,到底什么样的对象能够返回其地址,而什么样的对象不能够返回其地址?静态变量与局部自动变量的主要区别是什 么? 要想明白这些就需要理解程序的内存布局情况 程序的存储区域分为:代码段.只读数据段.已初始化的读写数据段.未初始化的数据段.堆.栈. 1.代码段.只读数据段.已初始化的读写数据段.未初始化的数据段都属于静态区域

动态内存与智能指针

一.shared_ptr 最安全的分配和使用动态内存的方法是调用一个名为make_shared的标准库函数.此函数在动态内存中分配一个对象并初始化它,返回指向此对象的shared_ptr. 1 shared_ptr<int> p3 = make_shared<int>(42); 2 shared_ptr<string> p4 = make_shared<string>(10, '9'); 3 shared_ptr<int> p5 = make_s

动态内存——动态内存与智能指针

全局对象在程序启动时分配,在程序结束时销毁.对于局部自动对象,当我们进入其定义所在的程序块时被创建,在离开块时销毁.局部static对象在第一次使用前分配,在程序结束时销毁. 除了自动和static对象外,C++还支持动态分配对象.动态分配的对象的生命期与它们在哪里创建是无关的,只有当显示地被释放时,这些对象才会销毁. 静态内存用来保存局部static对象.类static数据成员以及定义在任何函数之外的变量.栈内存用来保存定义在函数内的非static对象.分配在静态或栈内存中的对象由编译器自动创

在$.post()函数外 使用$.post()返回函数的数据

本来我的想法是 将$.post()返回函数的数据取出来操作,在网上搜了很久,说是将$.post()方法改为同步,并将$.post()返回的数据赋值给一个全局变量的方法. function getData(pageCurrent){ var result; $.ajax({ url: "/ajax/signMain.ashx", async: true,//改为同步方式 type: "POST", data: { "pageCurrent": pa

使用函数指针,完成一个sort()函数,能对任何类型的数组元素进行排序: 回调函数 以及 memcpy ()原型实现

进来复习了一下C语言指针,一直没有写过太多关于函数指针的代码,而且对回调函数的理解一直都是在理论上,基本上没有太写过关于它的代码,进来得空,写了一个小程序加深下自己对回调函数和函数指针的理解. 问题描述: 编写一个sort()函数,使它能够对任何类型的数组元素进行排序. 下面是我写的代码: /* 使用函数指针的回调函数技巧,设计一个能排序int 和char 数组的sort()函数 */ #include<stdio.h> #include<stdlib.h> #include<

新手,对函数,函数指针,回调函数, 函数指针作为函数的返回值和block的一些见解

很多初学者,学c语言时,看到函数都觉得难,我也是,一开始觉得函数太难了,后来慢慢就理解了 第一:函数 在c语言中最简单的函数一般有四种: 1, 无返回值, 无参数. 2, 无返回值,有参数. 3, 有返回值,无参数. 4, 有返回值,有参数 1, 无返无参  定义方式:      void 函数名(); 一般不怎么用这种形式的函数,可用来输出,打印 void functionOne() { printf("无返回值,无参数"); // 没有返回值不能写return } int main

10 函数指针 回调函数

?.函数指针定义 ?.函数回调 三.动态排序 四.函数返回值是函数指针

c语言(函数指针,回调函数)

//  main.m //  1-28随堂笔记 //讲师: 小辉 //笔者: 王学文 //  Created by lanouhn on 15/1/28. //  Copyright (c) 2015年 lanouhn. All rights reserved. // 函数指针, 回调函数 #import <Foundation/Foundation.h> struct student { char name[20]; float score; int age; }; typedef stru