A:使用qsort最重要的是比较函数的编写。首先,qsort函数的原型已经明确定义了这个元素的原型:int (* compar) (constvoid *,constvoid *),需要传入指向两个元素的指针。和上面加第三个参数的原因一样,比较函数的参数指针是void *类型,这个参数也不知道元素的实际大小,所以我们需要对类型进行强变换,转换成元素实际类型对应的指针。例如,为了对上面的int数组进行排序:
答案:C库函数void qsort (void * base,size _ t nitems,size _ t size,int (* compar) (constvoid *,constvoid *))对数组进行排序。下面是qsort()函数的声明。Base -指向要排序的数组的第一个元素的指针。
A:如果A小于B,返回值为负(0),即A会排在B之前,同理,如果A大于B,那么A会排在B之后,所以这里的qsort()是从小到大升序排序的。所以运行结果是:10 20 25 40 90 100。想想为什么。
答案:So QSORT (arr,sizeof (arr)/sizeof (arr [0]),sizeof (arr [0]),compare);在对qsort函数的调用中,第二个参数是要排列的元素个数(5),第三个参数是要排列的元素大小(16)。我们将arr传递给qsort函数,该函数将arr理解为指向数组第一个元素的指针。arr的第一个元素是arr [0] [0],所以arg1和arg2指的是指向' a [i] [0]'的指针。我们知道,a [i] [0]是一个字符,它是char,所以arg1和arg2