c语言实现泛型函数
来源:互联网 发布:国家调查数据库 编辑:程序博客网 时间:2024/06/04 01:31
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
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);
}
#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语言实现泛型函数
- C语言实现泛型swap函数
- strsep 函数 c 语言 实现
- C语言实现strcpy函数
- md5函数C语言实现
- C语言实现strcpy函数
- C语言strcpy函数实现
- 实现C语言 itoa函数
- C语言实现trim函数
- C语言实现函数模板
- md5函数C语言实现
- C语言实现atoi函数
- C语言实现mencpy函数
- 【c语言】实现Strcat函数
- C语言实现函数多态性
- random函数实现C语言
- 【C语言】实现stract函数
- c语言常用函数实现
- Putty初级使用及配置
- 异步套接字 connect返回-1
- IBM导航
- 如何在C语言中实现简单的泛型编程
- Linux的五个查找命令:find,locate,whereis,which,type/区别
- c语言实现泛型函数
- 2012年3月10日C++学习笔记
- 回调函数与泛型函数
- 修复DISCUZ!的pre_connect_feedlog等表不存在错误
- Photoshop照片模糊变清晰大全
- js+ajax+ext变量作用域问题
- erlang学习网站链接
- 常用DOS命令大全
- c++11新特性--static_assert