我们是否能写一个这种函数:
  能够对不论什么类型数据排序
  不论什么人在使用该函数不须要改动该函数代码(即:用户能够不必看到函数源 码,仅仅会调用即可)
  思考:
  用户须要排序的数据的类型千变万化,可能是int型,也有可能是自己定义的结构体类型,各种类型的大小比較规则是不一样的,这样看来实现一个这样全能的排序函数似乎不可能。
  但详细须要排序的类型应依照什么规则确定大小仅仅有使用该函数的用户最清楚,那我们可不能够把实现比較大小的功能交给用户来完毕了,到时候用户仅仅需告诉该函数比較规则(函数)在什么位置,这样排序函数不就能够知道数据大小的比較规则了嘛!排序功能也就能够实现了。
  
  
  
  那详细应该如何实现这个函数呢?
  我们知道函数是有地址的,仅仅要让用户把大小比較规则写到一个独立的函数中,然后把该函数的地址传给排序函数就能够了。
  
  以下的compare变量就是用来接收用户定义的大小比較规则函数地址
  //如果须要排序的数据放在了int型数组中
  int sort(int* arr,int (* compare)(const void* a,const void* b))
  {
int result = compare(arr,arr+1);//调用用户定义的大小比較函数得到谁大谁小   //.....详细排序过程省略...........//
  }
  
  用户仅仅须要写一个这种函数就能够了
  int comp(const void* a,const void* b)
  {
  //先强制转换类型,此处如果须要比較的数据类型为int型,当然须要比較结构体 //大小时要先转换成相应的结构体类型,然后再依据结构体中某些变量确定谁大谁 //小
   int* aa=(int*)a;
   int * bb=(int*)b;
   return *aa>*bb?1:-1;
  }
  
  
  然后用户调用
  sort(arr,comp);就能够了//如果须要排序的数据放在了int型arr数组中
  
  到如今为止,我们已经实现了这个全能的排序函数,事实上c++库中的qsort就是这样实现的,不光是c++,事实上java也有相似的实现方式,比方java中加入监听器时常常要传入一个对象,事实上是为了得到这个对象的引用,然后调用我们实现的对象中的方法(通过多态实现)(详细事例详见本博客排列组合java源码及jar包 http://blog.csdn.net/qingchunweiliang/article/details/26464479)
  

再议指针---------函数回调(qsort函数原理)的更多相关文章

  1. sort()函数与qsort()函数及其头文件

    sort()函数与qsort()函数及其头文件 sort()函数是C++中的排序函数其头文件为:#include<algorithm>头文件: qsort()是C中的排序函数,其头文件为: ...

  2. Java 实现函数回调

    在Java里没用委托(delegate)这方法,所以想要实现回调还是有些麻烦.(想了解C#如何实现?请查看:http://www.cnblogs.com/Martin_Q/p/4478494.html ...

  3. Javascript中的回调函数和匿名函数的回调

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  4. Javascript中的回调函数和匿名函数的回调示例介绍

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  5. C语言之函数指针、回调函数的使用

    一.背景 首先看下如下代码,这个定义是放在头文件的,在程序中tCdrvCallbackFkt也定义了另一个变量,而且括号后面还跟定义了几个变量,不理解这个定义. typedef void (PUBLI ...

  6. VC++的函数指针和回调函数 及友元函数

    什么是函数指针 函数指针是指向函数的指针变量.也就是说,它是一个指针变量,而且该指针指向一个函数. 对于指针变量来说,它的值是它指向的变量的地址.举个例子:指针变量pi是指向一个整型变量i的指针,则变 ...

  7. Python笔记_第四篇_高阶编程_再议装饰器和再议内置函数

    1. 概述: 我们在前面用了很多的装饰器这个工具的方法.这个位置要系统的讲一下装饰器. 1.2 为什么需要装饰器. 装饰器本质是一个Python函数,它可以让其他函数在不需要任何代码变动的前提下增加额 ...

  8. 函数指针和qsort函数

    1.函数指针的形式: 函数指针:int (*funcP) (int *a, int *b) 表示定义了一个funcP函数指针,指向了返回值为int类型,参数为int* 和int* 的函数 使用方式: ...

  9. 函数指针(pointer to function)——qsort函数应用实例

    一,举例应用 在ACM比赛中常使用 stdlib.h 中自带的 qsort 函数,是教科书式的函数指针应用示范. #include <stdio.h> #include <stdli ...

随机推荐

  1. Java基础学习总结(49)——Excel导入导出工具类

    在项目的pom文件中引入 <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifac ...

  2. nginx启用https访问

    什么是https? https 全称:Hyper Text Transfer Protocol over Secure Socket Layer,是http的安全版.即http下加入SSL协议层,因此 ...

  3. hdu 3605 Escape 二分图的多重匹配(匈牙利算法)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3605 Escape Time Limit: 4000/2000 MS (Java/Others)    ...

  4. storm-kafka编程指南

    目录 storm-kafka编程指南 一.原理及关键步骤介绍 (一)使用storm-kafka的关键步骤 1.创建ZkHosts 2.创建KafkaConfig 3.设置MultiScheme 4.创 ...

  5. 英特尔投资:7200万美元投资12家创新公司,包括3家中国公司(www.intelcapital.com)

    集微网消息,英特尔投资——英特尔公司全球投资机构,今天在英特尔投资全球峰会上宣布向12家科技创业公司投资超过7200万美元.加上今天宣布的新投资,英特尔投资在2018年投资总额已超过1.15亿美元. ...

  6. 【物理/数学】—— 概念的理解 moment、momentum

    moment:矩,momentum:[物] 动量:动力:冲力: 数学意义上的 moment(矩)概念其实源自于物理范畴.首先我们来介绍物理学意义上的矩(Momentum)的概念. 1. 物理学意义上的 ...

  7. 【u250】manhattan

    Time Limit: 1 second Memory Limit: 64 MB [问题描述] 混乱的城市已经变得无法控制.大楼随处乱造,城市的布局也是一片混乱.市长决定要结束这种局面,兵器并且想建造 ...

  8. oracle数据库的备份与恢复

    一.备份 方法1: PLSQL中进行导出    对于方式1: 对于导出可执行文件的选择,可通过下面的几个参考位置去查找: 导入imp:F:\app\Administrator\product\11.1 ...

  9. CleanCode代码整洁之道培训总结(2015-03-14)

    为期四天的CleanCode培训时间非常短.非常难准确掌握一些知识.但让我对代码有了一个又一次的认识和启示:之前也有看过设计模式.重构之类的书,看完之后也有一些感触,过后在写代码中还是不能应用进来,事 ...

  10. linux下FAT32格式u盘只读的问题及解决方法

    以下是网上看到的解决办法:http://blog.csdn.net/heqiuya/article/details/7870554 其实是掉电保护,之前挂在的SD变成了制度文件,只需要将SD卡重新挂载 ...