void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
有没有一种方法可以通过,比如说strcmp
到qsort
,而不使用辅助函数?
我试着做:
qsort(..., (int (*) (const void*, const void*) (strcmp)));
void qsort(void *base, size_t nitems, size_t size, int (*compar)(const void *, const void*))
有没有一种方法可以通过,比如说strcmp
到qsort
,而不使用辅助函数?
我试着做:
qsort(..., (int (*) (const void*, const void*) (strcmp)));
你在演员阵容中的try 只是有一个错误的右(右)括号.最后一个应该在演员阵容的type人之后.所以,你可以改变:
(int (*) (const void*, const void*) (strcmp))
// ^ wrong
到
(int (*) (const void*, const void*)) (strcmp)
// ^ right
Alternatively, although hiding pointer types in typedef
aliases is severely frowned-upon, function pointer types are an exception 到 that guideline. So, it is easier/clearer 到 define the required type for the qsort
compara到r first:
typedef int (*QfnCast) (const void*, const void*);
Then, you can cast 到 that type:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef int (*QfnCast) (const void*, const void*);
int main(void)
{
char list[5][8] = {
"Fred",
"Bob",
"Anna",
"Gareth",
"Joe"
};
qsort(list, 5, 8, (QfnCast)(strcmp));
for (int i = 0; i < 5; ++i) printf("%s\n", list[i]);
return 0;
}