我试图在c。中编写完全通用的数据结构库 c编程中是否有任何方法或技术可以在不知道其类型的情况下搜索数据? 在这里,我必须再次根据我的数据类型定义我的比较函数。
list.h
typedef struct _node
{
void *data;
struct _node *next;
}NODE;
typedef struct _list
{
NODE *head;
NODE *tail;
NODE *current;
}GLIST;
int search(GLIST *list,void *data,int (*COMPARE)(void*,void*));
和
list.c
int search(GLIST *list,void *data,int(*COMPARE)(void*,void*))
{
list->current=list->head;
int cIndex=1;
while(list->current)
{
if(COMPARE(list->current->data,data))
{
printf("data found at position %i.\n",cIndex);
if(list->current->next==NULL)
{
return 1;
}
}
list->current=list->current->next;
cIndex++;
}
printf("NO DATA FOUND.\n");
return 0;
}
和
mycode.c
int compare(void *list,void *data);
typedef struct _student
{
int studentNumber;
char name[64];
}STUDENT;
int main()
{
GLIST list;
//initializing list......
STUDENT stud;
//code .....
search(&list,&stud,compare) // I want an alternative of using compare here
search(&list,&stud); // want the function be like this and also be generic !
return 0;
}
int compare(void *list,void *data)
{
// I do not wanna have to declare this function even
return !strcmp(((STUDENT*)list)->name,((STUDENT*)data)->name);
}
我想知道是否存在比较元素"结构,联合,数组和#34;在c或任何其他技术上。
答案 0 :(得分:4)
在不知道数据类型的情况下,无法比较两个对象。
首次尝试可能会使用类似memcmp
的内容,但这至少有三个原因失败:
struct
或union
类型的对象也可能因填充而导致错误的结果。 因此,唯一的方法(通用库使用它)是定义接受用户定义的比较函数作为参数的函数。