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