首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >理解qsort()函数

理解qsort()函数
EN

Stack Overflow用户
提问于 2016-05-04 00:59:20
回答 4查看 554关注 0票数 0
代码语言:javascript
复制
int compare (const void * a, const void * b)
{
  return ( (int) (*(float*)a - *(float*)b) );
}

当我想要使用qsort函数时,我应该按照我所理解的格式编写一个比较函数。那么,为什么我们在比较函数的参数之前使用void呢?

那么,这个比较函数标准的参数和代码是用大括号括起来的,还是我们可以通过自己的意愿简单地更改代码甚至参数呢?

EN

回答 4

Stack Overflow用户

发布于 2016-05-04 01:14:27

不能,您不能更改参数或返回类型。当然,你也可以改变函数的“代码”。你可以比较任何你想要的东西。唯一重要的是返回值:

taken from here

如果第一个传递的参数‘小于’第二个参数,则返回值应为<0;如果两个参数都是相同的,则返回值应为== 0;如果第一个参数‘大于’,则返回值应为>0

例如,可以对字符串使用qsort函数,如下所示:

代码语言:javascript
复制
int compare (const void * a, const void * b)
{
    return strcmp((char *) a, (char *) b);
}
票数 2
EN

Stack Overflow用户

发布于 2016-05-04 01:06:43

在C中,void *意味着你可以在其中存储任何类型的指针。假设你想对一个字符串列表(char *)进行排序,你会怎么做?为int数据类型编写一个qsort实现,为char *编写一个?这里,qsort是使用void *编写的,允许您比较具有不同类型的不同内容。

是,参数类型为标准。请参阅stdlib.h中对它的定义。

代码语言:javascript
复制
void qsort(void *base, size_t nmemb, size_t size,
       int (*compar)(const void *, const void *));
票数 1
EN

Stack Overflow用户

发布于 2016-05-04 05:26:13

之所以使用空指针,是因为它们可以转换为其他指针类型,然后再转换回空指针,而不会出现任何问题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37010074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档