题目
如题
思路
其实没什么难的,只要严格按照 qsort 函数的参数来填充即可,这里要用到函数指针。
qsort 函数的原型如下:
void qsort(void *base, size_t nitems, size_t size,
int (*compar)(const void *, const void *));
参数说明:文章来源:https://www.toymoban.com/news/detail-669995.html
base:指向需要排序的数组的指针,数组中每个元素的大小应为 size 字节。
nitems:数组中的元素个数。
size:每个元素的大小(以字节为单位)。
compar:指向一个比较函数的指针。该函数用于比较两个元素的大小关系。文章来源地址https://www.toymoban.com/news/detail-669995.html
代码
#include<stdio.h>
#include<stdlib.h>
//比较函数,也是qsort函数需要的指针参数指向的函数
int compare(const void * a, const void * b);
int main()
{
int sz[5] = {1,5,2,6,4};//待排序的数组
int (*compar)(const void *, const void *);//函数指针compar
int * ps = sz;//指针指向sz数组
int i;
compar = compare;//指针指向compare函数
qsort(ps, 5, 4, compar);//调用 qsort 函数
for (i=0;i<5;i++)
{
printf("%d ",sz[i]);
}//打印排序结果
return 0;
}
int compare(const void * a, const void * b)
{
int num1 = *(const int *)a;//void转换类型后才能使用
int num2 = *(const int *)b;
if (num1 > num2)
{
return 1;
}
if (num1 < num2)
{
return -1;
}
if (num1 == num2)
{
return 0;
}
}
感悟
- 要注意调用一个函数一定要严格按照它参数的函数类型来填充参数,比如说这里 qsort 函数的一个参数是 int (*compar)(const void *, const void *),那么这个参数是函数指针,函数指针的类型 int ,以及它的参数类型是 const void *,这两个类型是一点都不能变的。但是在填充函数指针这个参数的时候可以选择填充 函数指针名 和 函数名,因为当函数指针指向一个函数以后,这个函数指针名 和 函数名 就可以互换使用了(只是用法差不多)。
- 详细理解了 void * 类型的变量怎么使用:比如这里想把把它作为一个比较函数的参数使用,而且我想的是这两个数是 int 类型的,但有一点是 void * 类型的变量不转换类型是无法使用的,所以我要把 void * 类型的变量转换为 int 类型的变量:int num = *(const void *) a;
- 首先,这个程序最后写的 compare 函数参数的意义是指向数组元素的指针,然后这个函数可以进行简化,让程序来判断元素大小:
int compare(const void * a, const void * b)
{
return (*(const int *)a - *(const int *)b);
}
到了这里,关于C语言题目 - 调用qsort函数对数组进行排序的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!