Приветствую!
Код
typedef struct critter
{
int number;
int value;
char * name;
} critter;
int comp(const void* a, const void* b)
{
const critter* k = (const critter*)a;
const critter* m = (const critter*)b;
int s = ((k -> number) - (m -> number));
return s;
}
critter mas[5];
mas[0].number = 5;
mas[1].number = 4;
mas[2].number = 3;
mas[3].number = 2;
mas[4].number = 1;
qsort(mas, 5, sizeof(critter), comp);
for (size_t i = 0; i < 5; i++)
{
printf("%d\n", mas.number);
}
Как перестроить функцию сравнения так, что бы в аргументы можно было передать не только number, но и value
int comp(const void* a, const void* b)
{
const critter* k = (const critter*)a;
const critter* m = (const critter*)b;
int s = ((k -> number) - (m -> number)); // в аргументы функции можно было передать value не изменяя функцию
return s;
}
Так не надо.
int comp(const void* a, const void* b)
{
const critter* k = (const critter*)a;
const critter* m = (const critter*)b;
int s = ((k -> value) - (m -> value));
return s;
}
Генерируется код
typedef struct critter_vector
{
size_t total;
size_t pos;
critter * data;
} critter_vector;
int critter_vector_compare_int(const void *a, const void *b)
{
return *(int *)a - *(int *)b;
}
void critter_vector_sort_int(critter_vector * src)
{
qsort(src->data, critter_vector_size(src), sizeof(critter), critter_vector_compare_int); //как передать не только number но и value
}
Так как поля critter будут разные. Не понимаю как всё это сделать.