码迷,mamicode.com
首页 > 其他好文 > 详细

使用函数指针实现任意数据类型大小比较

时间:2015-06-20 09:07:57      阅读:266      评论:0      收藏:0      [点我收藏+]

标签:

使用函数指针实现任意数据类型大小比较

学习如鹏网C语言也能干大事,第三章透彻讲指针 中的第 13 节 函数指针案例:获得任意类型数组的最大值

讲述了使用函数指针如何求任意数据类型的最大值,大家知道典型的max函数如下所示

 1 //函数功能:求int数组的最大值
 2 //假设输入数组为{8,7,2,9},length=4,下述函数返回值max为9
 3 int IntMax(int *array,int length)
 4 {
 5     int max,i;
 6     max = array[0];
 7     for(i=1;i<length;i++)
 8     {
 9         if(max<array[i])
10         {
11             max = array[i];
12         }
13     }
14     return max;
15 }

 


如果使用函数指针,那么如何求得任何类型的数据最大值,关键是使用函数指针

  1. 1 //如果data1>data2,返回值为正数
    2 //比如输入int类型数据8和9,返回值为-1,如果输入int类型数据10和7返回值为3
    3 typedefint(*compareFun)(void*data1,void*data2);
    4 //具体的int比较函数如下所示
    5 int*intCompare(void*data1,void*data2)
    6 {
    7     return *(int*)data1-*(int*)data2;//(int *)为指针类型转换为int
    8 }

     

 
比较的核心在于使用函数指针调用对应的类型比较函数(浮点型,整型,char型比较等),同时需要将准确的数据类型首地址传达给data1和data2,然后方能够在调用的函数当中确定以什么类型的指针解引用数据进行比较。
比较的过程中,不同类型的数据递加的最小单位是不一样的。比如int类型数据递加最小单位为4
int *a的地址假设为0x30000,那么a++后a的值为0x30004
如果是char *a的地址假设为0x30000,那么a++后a的值为0x30001
  1.  1 //任意数据类型求最大值
     2 //nums:比较数据首地址,unitSize:数据单元大小,size:数据大小
     3 //size:数据大小,int数组{1,2,3,4}size大小为4
     4 //compareFun func指针,数组大小data1>data2,返回正数
     5 void *Max(void *data,int unitSize,int size,compareFun func)
     6 {
     7     int i;
     8     char *max = (char *) data;
     9     char *item;
    10     for(i=0;i<size;i++)
    11     {
    12         item = (char *)data + i*unitSize;
    13         if(func(item,max)>0)
    14         {
    15             max = item;
    16         }
    17     }
    18     return max;
    19 }

     


测试程序如下所示:
  1. 1 int main(int argc, char *argv[])
    2 {
    3     int a[]={9,3,2,6,8,6,4,1,12};
    4     int *max;
    5     max =(int *)Max(a,sizeof(int),sizeof(a)/sizeof(int),intCompare);
    6     printf("max=%d\n",*max);
    7     return 0;
    8 }

    打印输出值为“max=12”

 
 

 

使用函数指针实现任意数据类型大小比较

标签:

原文地址:http://www.cnblogs.com/codecamel/p/4590193.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!