c语言实现泛型函数
2012-03-10 09:13
323 查看
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://lovocas.blogbus.com/logs/190164253.html
liner search:
#include
#include
void * lsearch(void *key, void *base, int n, int elemSize, int (*compfunc)(void *, void *)) {
int i = 0;
for(i = 0; i < n; ++i) {
void * currentLoc = (char *)base + i * elemSize;
if(!compfunc(currentLoc, key)) {
return currentLoc;
}
}
return NULL;
}
int intComp(void *a, void *b) {
return memcmp(a, b, sizeof(int));
}
void main() {
int arr[] = {1, 2, 3, 4, 5};
int key = 2;
int * result = (int *)lsearch(&key, arr, 5, sizeof(int), intComp);
if(result == NULL)
printf("404 NOT FOUND");
else
printf("FOUND IT: %d\n", *result);
}
注意点:
1.C中用 void * 实现泛型, void *指针类型不同于一般的职能类型,比如不能进行指针运算,因为不知道类型,当然这个类型的偏移量也不知道了。
2.intComp函数不能实现为 int intComp(int *, int *); 必须为void *。
3.void *的指针运算通常是先转换成一个byte的类型(char *),再进行运算。
4.注意string.h中memcpy memcmp strdup函数的用法。
http://lovocas.blogbus.com/logs/190164253.html
liner search:
#include
#include
void * lsearch(void *key, void *base, int n, int elemSize, int (*compfunc)(void *, void *)) {
int i = 0;
for(i = 0; i < n; ++i) {
void * currentLoc = (char *)base + i * elemSize;
if(!compfunc(currentLoc, key)) {
return currentLoc;
}
}
return NULL;
}
int intComp(void *a, void *b) {
return memcmp(a, b, sizeof(int));
}
void main() {
int arr[] = {1, 2, 3, 4, 5};
int key = 2;
int * result = (int *)lsearch(&key, arr, 5, sizeof(int), intComp);
if(result == NULL)
printf("404 NOT FOUND");
else
printf("FOUND IT: %d\n", *result);
}
注意点:
1.C中用 void * 实现泛型, void *指针类型不同于一般的职能类型,比如不能进行指针运算,因为不知道类型,当然这个类型的偏移量也不知道了。
2.intComp函数不能实现为 int intComp(int *, int *); 必须为void *。
3.void *的指针运算通常是先转换成一个byte的类型(char *),再进行运算。
4.注意string.h中memcpy memcmp strdup函数的用法。
相关文章推荐
- C语言及程序设计提高例程-26 实现线性表基本操作的函数
- 【面试题】C语言:实现一个函数,判断一个数是不是素数。
- 【C语言】字符串替换空格:实现一个函数,把字符串里的空格替换成“%20”
- C语言字符串库函数的实现
- 【C语言】编写一个函数reverse_string(char * string) 实现:将参数字符串中的字符反向排列。要求:不能使用C函数库中的字符串操作函数。
- C语言:编写一个函数实现一串字符串的左旋或者右旋
- 实现c语言中的可变参数函数
- C语言中可变参数函数实现原理
- C语言小函数——atol(自己实现)
- 【汇编】命令行下获取用户输入,实现类似C语言fgets函数功能
- C语言中可变参数函数实现原理
- C语言,仿内核方式实现分级打印 [附:函数指针、回调函数的小示例]
- C语言字符串库函数的实现(一)
- 【转载】C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- C语言中的可变参数函数的浅析(以Arm 程序中的printf()函数实现为例) .
- C语言 可变长参数函数的实现
- C语言实现的猜数字小游戏(主要是对于自定义函数的运用)
- C语言创建一个数组,利用函数调用实现数组的初始化,逆置和清零
- 关于字符串中函数的实现( C语言 )
- 常用的字符串处理库函数的C语言实现