C的例子

一个C的例子

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

//普通的search函数
int search(int * arr, size_t size, int target) {
	for(int i=0;i<size;i++) {
		if(arr[i] == target) {
			return i;	
		}
	}
	return -1;
}

//通用的search函数
int search_template(void* arr, size_t size, void* target, size_t element_size,
int(*func_cmp)(void*,void*) ) {
    for(int i=0;i<size;i++) {
		if( func_cmp((unsigned char*)arr + element_size * i, target) == 0 ) {
			return i;
		}
	}
	return -1;
}

//回调函数,专门用于比较int类型
int int_cmp(int *x, int* y) {
    return *x - *y;	
}

//typdef [内容] [别名],这里定义的别名就是 Book
typedef struct Book_str {
	char* name;
	char* info;
} Book;


//回调函数
int(*cmp)(void*,void*) 就是要调用的函数
void xx(void* a1, void* a2, int(*cmp)(void*,void*)) {
    int x = cmp(a1,a2);	
	printf("xx= %d\n",x);
}

int book_cmp(Book* b1, Book* b2) {
	int n= strcmp(b1->name, b2->name);
	if(n != 0) {
		return n;
	}
	return strcmp(b1->info,b2->info);
	
}

int main() {
    int arr[] = {5,6,1,4,6,11,34,101};
	//int result = search(arr,8,34);
	int target = 34;
	int* p = &target;
	int result= search_template(arr,8,p, 4, int_cmp);
	
	//printf( "%d", sizeof(int));
	printf("result=%d\n",result);
	
	
	Book *b1 = (Book *)malloc(sizeof(Book));
	b1->name = (char *)malloc(sizeof(char) *10);
	b1->name="123";
	b1->info = (char*)malloc(sizeof(char)*10);
	b1->info="123";
	
	Book *b2 = (Book *)malloc(sizeof(Book));
	b2->name = (char *)malloc(sizeof(char) *10);
	b2->name="abc";
	b2->info = (char*)malloc(sizeof(char)*10);
	b2->info="abc";
	
	xx(b1,b2,book_cmp);
	
	free(b1);
	free(b2);
	b1 = (void*)0;
	b2 = (void*)0;
	
}

猜你喜欢

转载自xxniao.iteye.com/blog/2415305