标签:
使用函数指针实现任意数据类型大小比较
学习如鹏网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 //如果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 }
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 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