// Error: un arreglo de double con la comparación de int. Compila sin avisos y responde mal.
#include <stddef.h>
#include <stdio.h>

typedef int (*compare_fn)(const void *, const void *);

const void *max_of(const void *items, size_t count, size_t size, compare_fn compare) {
    const char *bytes = items;
    const void *best = items;
    for (size_t i = 1; i < count; i++) {
        const void *item = bytes + i * size;
        if (compare(item, best) > 0) {
            best = item;
        }
    }
    return best;
}

int compare_int(const void *a, const void *b) {
    int x = *(const int *)a;
    int y = *(const int *)b;
    return (x > y) - (x < y);
}

int main(void) {
    double prices[] = {1.5, 0.25, 7.75};
    const double *top = max_of(prices, 3, sizeof prices[0], compare_int);
    printf("%.2f\n", *top);
    return 0;
}
