我試圖在C程序中使用通用方法來確定數組中最大的元素。指針算術和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
在一種新的方法,我不知道如何處理它。 Addionally我不知道如何處理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;
}
有很多錯誤...例如,變量temp
或if((*cmp)(temp,array[i]) == 0)
。
你有一個想法如何使用未定義的數據類型?
「這工作正常」 ... –
'臨時=陣列[0];':'數組[0]'類型是'void' !! (GCC擴展名) – BLUEPIXY
您的「比較」功能不好。即使它適用於您的測試用例也會被破壞。 – Joe