zoukankan      html  css  js  c++  java
  • C语言函数指针:获得任意类型数组的最大

     1 #include <stdio.h>
     2  
     3 //{3,5,8,7,6}
     4 /*
     5 int max(int *nums,int len)
     6 {
     7     int i;
     8     int max=nums[0];//假定第0个元素为最大值
     9     for(i=1;i<len;i++)
    10     {
    11         int value = *nums;
    12         if(value>max)
    13         {
    14             max = value;//如果找到比max还大的,则max让位
    15         }
    16         nums++;
    17     }
    18     return max;
    19 }
    20 */
    21  
    22 typedef struct _Dog
    23 {
    24     char* name;
    25     int age;
    26 } Dog;
    27 typedef int (*compareFunc)(void * data1,void * data2);
    28 //data 待比较数据数组的首地址,uniteSize单元字节个数
    29 //size:数据的长度。{1,3,5,6}:size=4
    30 //比较data1和data2指向的数据做比较,
    31 //如果data1>data2,则返回正数
    32 void* max(void* data,int unitSize,int size,
    33     compareFunc func)
    34 {
    35     int i;
    36     char *ptr = (char *)data;
    37     char *max = ptr;//假定最开始的元素为最大值
    38     for(i=1;i<size;i++)
    39     {      
    40         char* item = ptr+i*unitSize;//计算第i个元素的首地址   
    41         if(func(item,max)>0)//如果item大于max
    42         //到底取几个字节进行比较是func内部的事情
    43         {
    44             max = item;
    45         }
    46     }
    47     return max;//最大值的首地址
    48 }
    49  
    50 //data1是第一个被比较数字的首地址
    51 int intCompare(void* data1,void *data2)
    52 {
    53     int* ptr1 = (int*)data1;
    54     int* ptr2 = (int*)data2;
    55     int i1=*ptr1;
    56     int i2=*ptr2;
    57     return i1-i2;
    58 }
    59  
    60 int dogCompare(void* data1,void* data2)
    61 {
    62     Dog* dog1 = (Dog*)data1;
    63     Dog* dog2 = (Dog*)data2;
    64     return (dog1->age)-(dog2->age);
    65     //return (dog2->age)-(dog1->age);
    66 }
    67  
    68 int main(int argc, char *argv[])
    69 {
    70     /*
    71     int nums[] = {3,5,8,7,6};
    72     int *pMax = (int *)max(nums,sizeof(int),sizeof(nums)/sizeof(int),
    73         intCompare);
    74     int max = *pMax;
    75     printf("%d
    ",max);
    76     */
    77     /*Dog dogs[] ={{"沙皮",3},{"腊肠",10},{"哈士奇",5},{"京巴",8},{"大狗",2}};*/
    78     /*Dog *pDog = (Dog *)max(dogs,sizeof(Dog),
    79         sizeof(dogs)/sizeof(Dog),dogCompare);
    80     printf("%s=%d",pDog->name,pDog->age);*/
    81     /*qsort(dogs,sizeof(dogs)/sizeof(Dog),sizeof(Dog),dogCompare);
    82     int i;
    83     for(i=0;i<sizeof(dogs)/sizeof(Dog);i++)
    84     {
    85         Dog dog = dogs[i];
    86         printf("%s=%d|",dog.name,dog.age);
    87     }*/
    88     int nums[] = {3,5,8,7,6};
    89     qsort(nums,sizeof(nums)/sizeof(int),sizeof(int),
    90         intCompare);
    91     int i;
    92     for(i=0;i<sizeof(nums)/sizeof(int);i++)
    93     {
    94         int n = nums[i];
    95         printf("%d|",n);
    96     }
    97  
    98     return 0;
    99 }
  • 相关阅读:
    oracle 12c迁移数据及遇到的问题
    用最有效率的方法计算 2 乘以 8?
    Java 中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?
    是否可以在 static 环境中访问非 static 变量?
    什么是值传递和引用传递?
    Java 支持的数据类型有哪些?
    JDK、JRE、JVM 分别是什么关系?
    idea设置方法注释
    Java中&和&&的区别
    int和Integer有什么区别?
  • 原文地址:https://www.cnblogs.com/sening/p/4521874.html
Copyright © 2011-2022 走看看