C 函数指针

来源:互联网 发布:centos rpm e 编辑:程序博客网 时间:2024/04/30 05:01

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();}


原创粉丝点击