上述函数在数组是存储shor,int,long,float,double,char等类型的元素都可用,因为这些类型内存存储长度固定,但对于char *arr[]存储字符串数组不适用,为了解决这个问题,增加函数的通用性,可以在上述函数中增加一个函数指针的参数,用这个函数调用一个自定义的比较函数,实例如下
void *lSearch(void *key,void *base,int total_n,int elemSize,int (*cmpfn)(void *,void *)){ void *elemAddr; for(int i=0;i<total_n;i++){ elemAddr=(char *)base+i*elemSize; if(!cmpfn){ if(memcmp(elemAddr,key,elemSize)==0) return elemAddr; }else{ if(cmpfn(elemAddr,key)==0) return elemAddr; } } return NULL; } //字符串数组搜索范例 int strCmp(void *vp1,void *vp2){ char *s1=*(char**)vp1; //不要写成s1=(char *)cp1;s1获取的值不一样 char *s2=*(char**)vp2; return strcmp(s1,s2); } int main(){ char *key="abc"; char *arrc[]={"cc","bc","abc","dd"}; char *find=lSearch(&key,arrc,4,sizeof(char *),strCmp); }转载于:https://www.cnblogs.com/jerehao/p/5491643.html
