• c语言函数指针


     1 #include <stdio.h>
     2 typedef void (*intFunc)(int i);
     3  
     4 void test1(int age)
     5 {
     6     printf("test1:%d
    ",age);
     7 }
     8 int test2(char *str,int i)
     9 {
    10 }
    11 void foreachNums(int *nums,int len,intFunc func)
    12 {
    13     int i;
    14     for(i=0;i<len;i++)
    15     {
    16         int n = nums[i];//*(nums+i)
    17         func(n);
    18     }
    19 }
    20 void printIt(int i)
    21 {
    22     printf("value=%d
    ",i);
    23 }
    24 void print100(int i)
    25 {
    26     printf("value=%d
    ",i+100);
    27 }
    28 int main(int argc, char *argv[])
    29 {
    30     //intFunc f1 = test1;//intFunc类型的函数指针指向test1函数
    31     //f1(8);//执行f1函数指针指向的代码
    32     //intFunc f2 = test2;
    33     int nums[]={1,5,666,23423,223};
    34     //foreachNums(nums,sizeof(nums)/sizeof(int),printIt);
    35     foreachNums(nums,
    36         sizeof(nums)/sizeof(int),print100);
    37     return 0;
    38 }

     http://www.rupeng.com/Segments/Index/1752

    -----------------------------------------------------

     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 }

    http://www.rupeng.com/Segments/Index/1754

  • 相关阅读:
    columns布局应用场景
    flex速记
    css属性选择器模糊匹配
    ydui的rem适配方案
    vscode搜索失效问题
    ESP8266 超声波测距模块HC-SR04
    树莓派PICO Wifi 无线网卡 esp82666接线图
    查看数据库容量大小
    面试官问我JVM内存结构,我真的是
    深入浅出Java内存模型
  • 原文地址:https://www.cnblogs.com/zhubinglong/p/5991297.html
Copyright © 2020-2023  润新知