编程范式5 笔记 泛型

void *lsearch(void* key,void base,int n,int elemSize, int (*cmpfn)(void *,void *))
{
    for(int i<0;i<n;i++)
    {
        void* elemAddr=(char*)base+i*elemSize;
        //要显式指明指针类型
        if(cmpfn(key,elemAddr)==0)//callback
            return elemAddr;
    }
    return NULL;
}       
int array[]={4,2,3,7,11,6};
int size=6;
int number=7;
int* found=lsearch(&member,array,6,sizeof(int),intCmp);
if(found==NULL){...}
else{...}
int intCmp(void* elem1,void* elem2)
{
    int* ip1=elem1;
    int* ip2=elem2;
    return *ip1- *ip2;
} 

有时候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

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);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值