gpt4 book ai didi

字谜程序的比较函数

转载 作者:行者123 更新时间:2023-11-30 18:40:36 25 4
gpt4 key购买 nike

嘿伙计们,我这里有这段代码,但我无法理解 cmpfunc 函数实际上的作用,我不明白 return 语句,有人可以向我解释一下吗?比

#include <stdio.h>
#include <stdlib.h>

int values[] = { 88, 56, 100, 2, 25 };

int cmpfunc (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}

int main()
{
int n;

printf("Before sorting the list is: \n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}

qsort(values, 5, sizeof(int), cmpfunc);

printf("\nAfter sorting the list is: \n");
for( n = 0 ; n < 5; n++ ) {
printf("%d ", values[n]);
}

return(0);
}

最佳答案

qsort描述开始 - here it is.

void qsort (void* base, size_t num, size_t size,
int (*compar)(const void*,const void*));

因此,您需要编写一个具有此类输入和输出的函数,以便在 qsort 中使用。

int cmpfunc (const void * a, const void * b)

可以,但输入是 *void 并且您需要比较您的情况下的整数。所以你需要转换类型。这就是为什么有

 *(int*)a

最后,cmpfunc 的返回值必须符合 qsort 描述的要求。在我在本文开头提到的文章中,您可以找到此实现:

int compareMyType (const void * a, const void * b)
{
if ( *(MyType*)a < *(MyType*)b ) return -1;
if ( *(MyType*)a == *(MyType*)b ) return 0;
if ( *(MyType*)a > *(MyType*)b ) return 1;
}

您的版本只是它的适当简化。

关于字谜程序的比较函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25507438/

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