先在MSDN上了解一下qsort的大致内容。
void qsort( void *base, size_t num, size_t width, int (__cdecl *compare )(const void *elem1, const void *elem2 ) );
第一个参数是待排序数组的首元素地址,第二个参数是待排序数组的元素个数,第三个数组是待排序数组的每个元素的大小(单位字节),第四个参数是一个函数指针,比较两个元素所用函数的地址。这个函数要自己实现,大于返回大于0的数字,等于返回0,小于返回一个小于0的数字。
今天实现一下结构体排序。
#include<stdlib.h>
#include<string.h>
//结构体的声明要放在使用的前面,不然会报错
struct stu
{
char name[20];
int age;
};
int cmp_stu_name(const void* e1,const void* e2)
{
return strcmp(((struct stu*)e1)->name, ((struct stu*)e2)->name);
}
void test1()
{
struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
qsort(s, sz, sizeof(s[0]), cmp_stu_name);
}//按ASCII排序
int cmp_stu_age(const void* e1, const void* e2)
{
return ((struct stu*)e1)->age - ((struct stu*)e2)->age;
}
void test2()
{
struct stu s[3] = { {"zhangsan",20},{"lisi",30},{"wangwu",10} };
int sz = sizeof(s) / sizeof(s[0]);
//运行到下面这个函数的时候不要按F11,会出错
//按F10就可以了
//在监视里面可以观察到数组的变化
qsort(s, sz, sizeof(s[0]), cmp_stu_age);
}
int main()
{
test2();
test1();
return 0;
}
刚从B站学完出来,怕忘了,趁着印象还深,先在这里存着,有时间再复习。
标签:const,struct,int,void,qsort,stu,使用,sizeof,库函数 From: https://blog.51cto.com/u_15736615/6033519