C 函数指针

C 函数指针

 

 

#include <stdio.h>
#include <stdlib.h>

typedef int (*cmp)(void *, void *);
typedef struct book * Book;


struct book
{
	int id;
	char name[10];
};

void *max( void * array[], int len, cmp func);

int cmp_int(void *p, void *q);
int cmp_struct(void *p, void *q);

int insert_struct(Book *pos , int id, char * name);
int insert_int(int **pos, int val);


void *max(void * array[],int len, cmp func)
{
    void *tmp;
    int i;
    tmp = array[0];
    for( i = 1; i < len; i ++)
    {
        if( (*func)(tmp, array[i]) == -1)
                tmp = array[i];
    }    
    return tmp;
}    
int cmp_int(void *p, void *q)
{
    int *a, *b;
    a = (int *)p;
    b = (int *)q;
    if( *a > *b)
        return 1;
    else if( *a < *b)
        return -1;
    else return 0;
}    
int cmp_struct(void *p , void *q)
{
    Book a, b;
    a = (Book)p;
    b = (Book)q;
    if(a->id > b->id)
    {
        return 1;
    }    
    else if(a->id  < b->id)
    {
        return -1;
    }    
    else return 0;
}    
int insert_struct(Book *pos, int id, char *name)
{
    Book p;
    p = (Book) malloc(sizeof(struct book));
    if(p == NULL)
    {
        printf("error");
        return -1;
    }    
    p->id = id;
    strcpy(p->name, name);
    *pos = p;
    return 0;
}    
int insert_int(int **pos, int val)
{
    int *p;
    p = (int *)malloc(sizeof(int));
    if(p == NULL)
        return -1;
    *p = val;
    *pos = p;
    return 0;
}    
int main()
{
    Book arrayb[3];
    int *arrayi[3];
    int i;
    int id;
    int val;
    char name[10];
    Book res1;
    int *res2;
    for( i = 0; i < 3; i ++)
    {
        printf("input");
        scanf("%d", &id);
        scanf("%s", name);
        if(insert_struct( &(arrayb[i]) , id, name) == -1)
            exit(1);
        printf("input int");
        scanf("%d",&val);
        if(insert_int (&(arrayi[i]) , val) == -1)
            exit(1);
        
        
        
    }  
    res1 = (Book) max(arrayb, 3, cmp_struct);
    res2 = (int *) max(arrayi, 3, cmp_int);
        
    printf("%d %s/n", res1->id, res1->name);
    printf("%d/n", *res2);  
    getchar();
    getchar();
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值