通过函数名调用函数:
int max = maxValue(4, 5);
printf("max = %d\n", max);
函数类型:int (int, int)
1.定义函数指针
int *p = NULL;
函数类型:int (int, int)
函数指针的类型:int (*)(int, int)
p是函数指针变量名
int (*p)(int, int) = NULL;
2.给函数指针赋值(使用函数首地址)
函数存放在代码区,函数名是函数存储空间的首地址
p = maxValue;
3.通过函数指针调用函数和通过函数名调用函数一样。
动态排序:
使用回调函数,提高代码的复用性,提高代码的可修改性(当需求有变化时,可以快速简单的修改)
Function.h struct student { ]; // 姓名 int age; // 年龄 double score; // 成绩 int num; // 学号 }; typedef // 打印所有学生的信息 void printArray(Student stuArray[], int count); // 比较两个学生的年龄 BOOL compareStuAge(Student stu1, Student stu2); // 比较两个学生的姓名 BOOL compareStuName(Student stu1, Student stu2); // 比较两个学生的成绩 BOOL compareStuScore(Student stu1, Student stu2); // 比价两个学生的学号 BOOL compareStuNum(Student stu1, Student stu2); typedef BOOL (*FUNC)(Student, Student); // 排序函数 void sortStudent(Student *stu, int count, FUNC p);
Function.m // 比较两个学生的年龄 BOOL compareStuAge(Student stu1, Student stu2) { return stu1.age > stu2.age; } // 比较两个学生的姓名 BOOL compareStuName(Student stu1, Student stu2) { ; } // 比较两个学生的成绩 BOOL compareStuScore(Student stu1, Student stu2) { return stu1.score < stu2.score; } // 比价两个学生的学号 BOOL compareStuNum(Student stu1, Student stu2) { return stu1.num > stu2.num; } // 排序函数 void sortStudent(Student *stu, int count, FUNC p) { ; i < count - ; i++) { ; j < count - - i; j++) { ])) { Student temp = stu[j]; stu[j] = stu[j + ]; stu[j + ] = temp; } } } }
main.m int main(int argc, const char * argv[]) { Student stu1 = {, }; Student stu2 = {, , }; Student stu3 = {, -, }; Student stu4 = {, , }; Student stu5 = {, , }; Student stuArray[] = {stu1, stu2, stu3, stu4, stu5}; int count = sizeof(stuArray) / sizeof(Student); // 动态排序 sortStudent(stuArray, count, compareStuNum); printArray(stuArray, count); sortStudent(stuArray, count, compareStuAge); printArray(stuArray, count); sortStudent(stuArray, count, compareStuName); printArray(stuArray, count); sortStudent(stuArray, count, compareStuScore); printArray(stuArray, count);