【问题标题】:cmpfunc in qsort() function in cc 中 qsort() 函数中的 cmpfunc
【发布时间】:2016-04-06 12:34:11
【问题描述】:

有人可以解释一下cmpfunc 用于qsort 函数吗?此函数中的ab 是什么,它们指向什么?

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

【问题讨论】:

  • 它们是函数中要比较的两个元素。
  • ab 是指向数组元素的指针。
  • @Idos Nitpicking: "它们是两个元素......" 它们不是要比较的两个元素本身,而是指, 指向要比较的元素。

标签: c sorting libc qsort


【解决方案1】:

在此输入是 *void 并且您需要在您的情况下 comaper 整数。所以你需要转换类型。这就是为什么有

     *(int *) a

可以是浮点型

     *(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; 
}

【讨论】:

  • 你的意思是void * 不是*void,是吗?
  • 不,我只想说空指针,谁可以取任何数据类型的地址
  • void *void 指针的类型,是指向void 的指针类型,*void 不是。实际上后者不是有效的 C.
  • 所以他们首先引用一个指向元素的指针,然后取消引用它。
【解决方案2】:

cmpfunc 中的ab 是指向const void 类型的指针。 cmpfunc 可以接受指向任何数据类型数组元素的指针。
void * 指针不能被取消引用,因此在取消引用之前需要转换 int *

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-08-17
    • 2012-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-30
    • 2010-11-07
    • 1970-01-01
    相关资源
    最近更新 更多