c - C中的指针算术和 "generic"

标签 c pointers math compare

我尝试在 C 中编写一个通用方法来识别数组的最大元素。

首先,我编写了这个:

int compare(const void* a, const void* b) {
    if(a < b)
        return 0;

    return 1;
}

int main(void) {

    int (*prt)(const void*, const void*);
    prt=compare;

    printf("%i",(*prt)(1,1));

    return EXIT_SUCCESS; 
}

这工作正常,但如果我尝试将函数指针 prt 在新方法中,我不知道如何处理。 另外我不知道如何处理 void* 类型。

void* maximum(int len, void* array, size_t size, int (*cmp)(const void*, const void*));

int compare(const void* a, const void* b) {
    if(a < b)
        return 0;

    return 1;
}

int main(void) {

    int (*prt)(const void*, const void*);
    prt=compare;

    printf("%i",(*prt)(1,1));

    int array[6] = {3, 1, 0 , 4 , 3, 9};

    maximum(len,array,0,prt);

    return EXIT_SUCCESS;
}

void* maximum(int len, void* array, size_t size, int (*cmp)(const void*, const void*)) {
    void* temp;

    temp = array[0];

    printf("%i",a);
    int i;
    for(i = 1; i < len; i++) {
        if((*cmp)(temp,array[i]) == 0) {
            temp = array[i];
        }
    }

    return 0;
}

有很多错误...例如变量 tempif((*cmp)(temp,array[i]) == 0)

您知道如何使用未定义的数据类型吗?

最佳答案

您正在比较地址而不是值:

int compare(const void* a, const void* b) {
    if(a < b)
        return 0;

    return 1;
}

应该是:

int compare(const void* a, const void* b) {
    if(*(int *)a < *(int *)b)
        return 0;

    return 1;
}

关于c - C中的指针算术和 "generic",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24621503/

相关文章:

c - 使用二维数组的 malloc 和 strtok

c++ - 检查一棵树是否满足红黑树的black-height属性

math - 未评级实体与威尔逊评分负面评级实体——如何处理?

c++ - 这个错误可能是什么? ANSI C 文件

c - 4位十进制到16位二进制转换码

pointers - 用指针索引-指针如何与 slice 一起使用?

c - 分配结构指针数组?

algorithm - 递归算法数组的时间复杂度

javascript - 如何在javascript中通过键盘直接在输入中插入数字?

c - 如何生成 _ _ _ 形式的随机数。 _ _ _ _(C语言)