我正在使用C语言中的函数和数据结构创建我的个人通用库。
我有一个通用的载体
typedef struct vector
{
int max;
int size;
void **data;
} vector_t;
我为vector创建了函数:
int vector_new( vector_t * v, int vecsize );
int vector_add( vector_t *v , void *elem );
int vector_remove( vector_t * v, void *elem);
void vector_free( vector_t *v );
在删除函数的实现中,当且仅当元素尚未存在于数据数组中时,才添加元素。 我创建了一个函数 search (因为我不想对我插入的元素进行排序)以查找可能的重复项。
好吧,我对我必须传递给函数的第一个参数的类型有疑问。我想创建函数 search 不仅仅是为了这个用途,而是一般。
在remove()中,我这样调用它:search(v->data, elem);
,
但该功能的原型将如何?
int search( ??? , void * e );
我知道第一个参数可能是一个数组。但我不知道例如void*
或void**
重要的是,这个函数不仅适用于我创建的结构和函数。
答案 0 :(得分:1)
听起来你需要定义一个函数指针,用于比较向量中的元素是否相等。然后可以将其作为参数添加到搜索方法
typedef bool (*vector_equals)(void* pLeft, void* pRight);
int vector_search(vector_t* v, vector_equals callback);
现在假设我有一个包含int
值的向量。我可以将回调定义为
bool vector_int_equals(void* left, void* right) {
int* intLeft = left;
int* intRight = right;
return *left == * right;
}
答案 1 :(得分:0)
我会做int search(void **array, unsigned int size, void *data);
这是因为你总是在一个指针数组中搜索(与什么无关),因此void *
的数组看起来是正确的。
您可能还想考虑比较是做什么的。如果它是指针之间的简单==
,那很简单。但如果你需要别的东西,可能会更复杂。