有时候array是指针数组那么cmp要跳两次
char *notes={"Ab","F#","B","Gb","D"} char *favoritenote="Eb" char **found= //两个*是为了让机器意识到要跳两次 lsearch(&favoriteNote,notes,5,sizeof(char *),StrCmp) //void*不可解引用,void**可以 int StrCmp(void* ip1,void* ip2) { char* s1=*(char **)vp1; /* char *s1=(char *)vp1; 对应lsearch(favoriteNote,notes,5,sizeof(char *),StrCmp) */ char* s2=*(char **)vp2; return strcmp(s1,s2); }函数与方法(成员函数)的不同在于方法有this指针 静态方法没有this指针
void *bsearch(void* key,void* base,int n,int elemsize,int (*cmp)(void *,void*))stack.h
typedef struct{ int* elems; int logicallen;//当前元素个数 int alloclength;//最大容量 }stack; void StackNew(stack* s); void StackDespose(stack* s); void StackPush(stack* s,int value); int StackPop(stack* s); stack s; StackNew(&s); for(int i=0;i<5;i++) { StackPush(&s,i); } SatckDispose(&s); void StackNew(stack *s) { s->logicallen=0; s->alloclen=4; s->elems=malloc(4*sizeof(int)); assert(s->elems!=NULL); }