c-如何对结构中的特定字段使用比较函数



假设我有以下结构:

struct Person
{
int age;
int weight;
int height;
};

我想用一个";通用的";compare函数,它将获取结构体person的两个实例,然后通过比较两个特定字段来进行比较。

假设我的比较函数是这样的:

int compare(void *first_data, void *second_data, void *param)
{
if (first_data->param > second_data->param)
{
return -1;
}

if (first_data->param < second_data->param)
{
return 1;
}

return 0;
}

void *first_data将表示结构Person的第一个实例,void *second_Data将表示结构Person的第二个实例,而void *param将以某种方式指示函数,根据哪个字段来比较结构。目前我不知道如何使用这个";void*param";为此目的。例如,我如何通过";重量;领域

传入所需成员的偏移量,而不是param。由于所有成员都是int,因此可以进行共同比较。

#include <stddef.h>
int Person_compare(const struct Person *first_data, 
const struct Person *second_data, size_t param_offset) {
int first  = *(int *)((char *)first_data + param_offset);
int second = *(int *)((char *)second_data + param_offset);
return (first < second) - (first > second);
}

示例用法:

#include <stddef.h>
int weight_cmp = Person_compare(&pa, &pb, offsetof(struct Person, weight));

如果成员的类型不同,则可以使用_Generic来引导比较函数选择。

相关内容

  • 没有找到相关文章

最新更新