一、qsort函数-数组排序
qsort函数是c库里的数组排序函数。会将原始数组进行升序排列。
头文件:
#include <stdlib.h>
函数原型:
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
参数:
base:数组首地址
nmemb:数组长度
size:数组元素长度
compar:函数指针,比较传入的2个数据的大小,并返回比较结果
无返回值。
额外知识点:
函数指针和指针函数是两个不同的概念。
函数指针是指指向函数的指针,它的类型与函数的返回值类型和参数类型相对应。通过函数指针,可以实现函数的回调和动态调用等功。
指针函数则是指返回指针类型的函数,它的返回值是一个指针,可以用来指向一个地址或数据。指针函数通常用于动态分配内存和返回动态生成的数据结构等场景。
需要注意的是,函数指针和指针函数都跟指针有关系,但它们本质上是不同的概念。
总结:
函数指针:本质是指针,指向的是一个函数。形式如下:
void (*pFun)(void);
int (*pFun)(int i,int k);
指针函数:本质是函数,返回值是一个指针。形式如下:
int* pFun(int i,int k);
二、测试代码
测试代码1:
#include <stdio.h>
#include<stdlib.h>
#include<string.h>
static int cmpstringp(const void *p1, const void *p2)
{
/* The actual arguments to this function are "pointers to
pointers to char", but strcmp(3) arguments are "pointers
to char", hence the following cast plus dereference */
return strcmp(* (char * const *) p1, * (char * const *) p2);
}
int main(int argc, char *argv[])
{
int j;
if(argc < 2)
{
fprintf(stderr, "Usage: %s <string>...\n", argv[0]);
exit(EXIT_FAILURE);
}
qsort(&argv[1], argc - 1, sizeof(char*), cmpstringp);
for(j = 1; j < argc; j++)
puts(argv[j]);
exit(EXIT_SUCCESS);
}
测试结果:
测试代码2:
#include <stdio.h>
#include <stdlib.h>
int values[] = { 4, 1, 10, 9, 2, 25 };
int compare (const void * a, const void * b)
{
return ( *(int*)a - *(int*)b );
}
int main ()
{
int n;
int length=sizeof(values)/sizeof(int);//数组长度
printf("数组长度:%d\n",length);
qsort (values, length, sizeof(int), compare);
for (n=0; n<length; n++)
printf ("%d ",values[n]);
printf("\n");
return 0;
}
测试结果:
欢迎关注公众号:嵌入式学习与实践