对结构体数组里面的内容进行排序 #include"stdio.h" #include"string.h" #define TYPE student typedef struct{ char name[20]; char school[30]; int age; }student; typedef int(*pFun)(TYPE, TYPE);//把pFun定义为一个有两个结构体类型参数,返回int类型的函数指针 int fun3(TYPE a, TYPE b)//按学生的年龄大小进行排序 { return a.age>b.age; } int fun4(TYPE a, TYPE b)//按学校的名字进行排序 { return strcmp(a.school, b.school)>0; //这个地方要写strcmp(a.school, b.school)>0 因为strcmp(参数1,参数2)的比较结果 为真的话就是返回1 否则返回-1 //对于一个逻辑值来讲,非零为真 0为假 } void bubbleSort(TYPE *arr, int len, pFun fun) { TYPE tmp; for (int i = 0; i <len-1; i++) { for (int j = 0; j < len-1; j++) { if (fun(arr[j],arr[j+1])) { tmp = arr[j]; arr[j] = arr[j + 1]; arr[j + 1] = tmp; } } } } int main() { //对结构体数组进行排序 //定义结构体数组作为变量 student stu[5] = { { "张三", "清华大学", 18 }, { "李四", "北大大学", 20 }, { "王飞", "湖南大学", 24 }, { "德玛", "战争学院", 16 }, { "李飞", "家里蹲大学", 26 }, }; //把结构体数组的首地址传过去 第三个参数写要调用的函数的名字 bubbleSort(stu, 5, fun4); for (int i = 0; i < 5; i++) { printf("%s %s %d\n", stu[i].name, stu[i].school, stu[i].age); } return 0; }