C语言--通用类型的swap函数和数组线性搜索函数的实现

it2022-05-05  66

通用类型的SWAP函数的实现

void swap(void *vp1,void *vp2,int size){ char buffer[size]; //也可用malloc获取一块size大的内存 memcpy(buffer,vp1,size); memcpy(vp1,vp2,size); memcpy(vp2,buffer,size); } //调用举例 int n1=5,n2=6; swap(&n1,&n2,sizeof(int)); char *s1="ming",*s2="li"; swap(&s1,&s2,sizeof(char **)); //字符串不等长,不能交换字符串,交换指针

通用类型数组的线性搜索函数的实现

void *lSerch(void *key,void *base,int n,int elemSize){ void *elemAddr; for(int i;i<n;i++){ elemAddr=(char *)base+i*elemSize; if(memcmp(elemAddr,key,elemSize)==0) return elemAddr; } return NULL; }

上述函数在数组是存储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


最新回复(0)