c 中的 qsort() 函数中的 cmpfunc
cmpfunc in qsort() function in c
谁能给我解释一下 cmpfunc
是在 qsort
函数中使用的吗?此函数中的 a
和 b
是什么,它们指向什么?
int cmpfunc(const void *a, const void *b)
{
return(*(int*)a - *(int*)b);
}
a
和 cmpfunc
中的 b
是指向 const void
类型的指针。 cmpfunc
可以接受指向任何数据类型数组元素的指针。
void *
指针无法取消引用,因此在取消引用之前需要强制转换 int *
。
在这个输入中是 *void 并且在你的情况下你需要 comaper 整数。所以你需要转换类型。这就是为什么
*(int *) a
可以是float类型
*(float *) a
等等其他类型...
你可以找到这个实现:
int cmpfunc(const void *a, const void *b)
{
if(*(int *)a < *(int *)b) return -1;
if(*(int *)a == *(int *)b) return 0;
if(*(int *)a > *(int *)b) return 1;
}
谁能给我解释一下 cmpfunc
是在 qsort
函数中使用的吗?此函数中的 a
和 b
是什么,它们指向什么?
int cmpfunc(const void *a, const void *b)
{
return(*(int*)a - *(int*)b);
}
a
和 cmpfunc
中的 b
是指向 const void
类型的指针。 cmpfunc
可以接受指向任何数据类型数组元素的指针。
void *
指针无法取消引用,因此在取消引用之前需要强制转换 int *
。
在这个输入中是 *void 并且在你的情况下你需要 comaper 整数。所以你需要转换类型。这就是为什么
*(int *) a
可以是float类型
*(float *) a
等等其他类型...
你可以找到这个实现:
int cmpfunc(const void *a, const void *b)
{
if(*(int *)a < *(int *)b) return -1;
if(*(int *)a == *(int *)b) return 0;
if(*(int *)a > *(int *)b) return 1;
}