gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 15:31:38 24 4
gpt4 key购买 nike

我尝试在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com