bsearch()函数里的最后一个形参是指向函数的指针啊,直接传入CMP为什么没有用?

#include <stdio.h>
#include <stdlib.h>
int CMP(int *a,int *b)
{
if(*a<*b)
return -1;
else if(*a>*b)
return 1;
else
return 0;
}
int main(void)
{
int search[10]={1,3,6,7,10,11,13,19,28,56} ;
int a=13,*p,i;
/*对数组search 进行二分搜索13*/
p=(int *)bsearch(&a, search,10, sizeof(int),(int(*)(const void *,const void *))CMP);
printf("The elems of the array are\n");
for(i=0;i<10;i++)
printf("%d ",search[i]);
/*显示元素13 在原数组中的位置*/
if(p)
printf("\nThe elem 13 is located at %d of the array\n",p-search+1);
else
printf("\nSearch is fail!!\n");
getchar();
}

p=(int *)bsearch(&a, search,10, sizeof(int),(int(*)(const void *,const void *))CMP);
在CMP函数前为什么还要加强制类型转换?

犯罪嫌疑人X
浏览 65回答 1
1回答

扬帆大鱼

你试运行一下这个代码:#include <stdio.h>#include <stdlib.h>/*_CRTIMP __checkReturn void * __cdecl bsearch(__in const void * _Key, __in_bcount(_NumOfElements * _SizeOfElements) const void * _Base,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__in size_t _NumOfElements, __in size_t _SizeOfElements,&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;__in int (__cdecl * _PtFuncCompare)(const void *, const void *));*/int&nbsp;CMP(int&nbsp;*a,int&nbsp;*b){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;tmp = 0;&nbsp;&nbsp;&nbsp;&nbsp;if(*a<*b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = -1;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;if(*a>*b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = 1;&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;tmp = 0;&nbsp;&nbsp;&nbsp;&nbsp;printf("tmp = %d\n", tmp);&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;tmp;}int&nbsp;main(void){&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;search[10]={1,3,6,7,10,11,13,19,28,56} ;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;a=3,*p,i;&nbsp;&nbsp;&nbsp;&nbsp;/* 对数组search 进行二分搜索a */&nbsp;&nbsp;&nbsp;&nbsp;p=(int&nbsp;*)bsearch(&a, search, 10,&nbsp;sizeof(int),(int(*)(const&nbsp;void&nbsp;*,constvoid&nbsp;*))CMP);&nbsp;&nbsp;&nbsp;&nbsp;printf("The elems of the array are\n");&nbsp;&nbsp;&nbsp;&nbsp;for(i=0;i<10;i++)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("%d ",search[i]);&nbsp;&nbsp;&nbsp;&nbsp;/*显示元素a 在原数组中的位置*/&nbsp;&nbsp;&nbsp;&nbsp;if(p)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\nThe elem %d is located at %d of the array\n",a, p-search+1);&nbsp;&nbsp;&nbsp;&nbsp;else&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;printf("\nSearch is fail!!\n");&nbsp;&nbsp;&nbsp;&nbsp;getchar();}tmp = -1tmp = 0The elems of the array are1 3 6 7 10 11 13 19 28 56The elem 3 is located at 2 of the array我在注释里面给你贴出来了bsearch的函数原形阿,你能看得出来的,类型mismatch的话肯定编译都会失败的阿
打开App,查看更多内容
随时随地看视频慕课网APP