1.函数指针定义:数据类型 (*指针变量名)指针类型
例如: int sum(int x,int y){
return x + y;
}
定义调用上函数
int (*p)(int x,int y);
p = sum;
int y = (9,7);
printf("y = %d\n",y);
2.函数指针重指向,可以指向多个函数,但类型要保持一致。也就是给函数指针赋值的函数,应该和函数原型保持一致。
3.使用typedef int (*新名)(int x,int y);里面可以省略参数x,y.
例如 char minValue(char x,char y);
char minValue(char x,char y){
return x > y ? x : y;
}
typedef char (*MIN) (char x,char y);
调用
MIN p4 = minValue;
int t = p4('A','b');
printf("t = %c\n",t);
4.回调函数:是一个函数,它由调用方自己实现,共被调用方调用的函数,一种非常灵活的设计模式。
例如:定义两个函数,getvalue 和 maxvalue
int value = getvalue(3,5,maxvalue);
或者定义以下
max p = null;
p = maxvalue;
int value = getvalue(3,5,p8);
5.动态排序
核心思想:(1)先定义一个学生信息的结构体,里面是各个成员类型
(2)定义学生结构体数组:Student stu [] = {{},{},{},{},};
(3)定义一个输出结构体中成员信息的函数
(4)调用(3)这个输出函数
(5)定义一个给学生信息排序的冒泡排序函数
(6)最后分别定义有关成员类型的函数方法
例如;定义分数
BOOL sortWithSore(student s1,student s2){
return s1.score > s2.score;
}
定义名称
BOOL sortWithName(student s1,student s2){
return strcmp(s1.name , s2.name) > 0 ? yes : no;
}
(7)然后在main函数中定义学生结构体数组
(8)调用哪个输出结构体信息的数组
printfStudentInfo(stu1,sizeof(stu1)/sizeof(stu[0]));输出全部信息。
再用自己定义的那个冒泡排序的方法去分别调用分数排序,年龄排序,姓名排序的方法进行输出
bullsort(stu1,sizeof(stu1)/sizeof(stu1[0]),sortWithName);
bullsort(stu1,sizeof(stu1)/sizeof(stu1[0]),sortWithAge);