一、qsort 函数的形式
1.1使用 qsort 函数包含的库
1.2qsort 函数的参数
qsort:对数组的元素进行排序
1.3参数中的 compar 函数
struct stu
{
char name[20];//姓名
int age;//年龄
double grade;//成绩
};
int cmp_name(void* p1, void* p2)
{
//如果按照姓名排序
return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}
int cmp_age(void* p1, void* p2)
{
//如果按照年龄排序
return ((int*)p1 - (int*)p2);
}
int cmp_grade(void* p1, void* p2)
{
//如果按照成绩排序
return (int)((double*)p1 - (double*)p2);
}
二、qsort 函数的使用
从 qsort 函数的形式,我们就不难看出 qsort 可以根据我们传入的 compar 函数来进行我们所需要的排序。
struct stu
{
char name[20];//姓名
int age;//年龄
double grade;//成绩
};
int cmp_name(void* p1, void* p2)
{
//如果按照姓名排序
return strcmp(((struct stu*)p1)->name, ((struct stu*)p2)->name);
}
int cmp_age(void* p1, void* p2)
{
//如果按照年龄排序
return ((int*)p1 - (int*)p2);
}
int cmp_grade(void* p1, void* p2)
{
//如果按照成绩排序
return (int)((double*)p1 - (double*)p2);
}
int main()
{
struct stu s1 = { "zhangsan",14,89.5 };
struct stu s2 = { "lisi",17,94.0 };
struct stu s3 = { "wangwu",45,66.5 };
struct stu arr[] = { s1,s2, s3 };
int sz = sizeof(arr) / sizeof(arr[0]);
qsort(arr, sz, sizeof(arr[0]), cmp_name);
//需要排序的数组 //每个数组元素的大小
//排序的数组中的元素数 排序所遵循的compar函数名
return 0;
}
从调试我们可以看出来,qsort 已经为数组排好序了。
三、void* 指针
void* 类型的指针 - 不能进行解引用操作符,也不能进行 + - 整数的操作
void* 类型的指针是用来存放任意类型数据的地址
void* 无具体类型的指针
可以用 void* 指针接收任何类型指针,如果需要解引用 void* 指针,可以强制类型转换。