qsort 函数的使用

一、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* 指针,可以强制类型转换。