函数指针
#include <stdio.h>
int max(int x,int y){
return x > y ? x : y;
}
main(){
int (*p)(int,int) = max;
int a=3,b=2,c=5;
printf("max = %d\n",p(p(a,b),c));
}
回调函数
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
int randArry(int *arr,int len,int(*rad)()){
arr[len-1] = rad();
if(len - 1) randArry(arr,len-1,rad);
return 1;
}
int fun(){
return rand() % 80 + 21;
}
int main(){
int arry[10] = {1};
int i = 0;
srand((unsigned)time(0));
randArry(arry,10,fun);
for(i=0;i<10;++i)
printf("%d ",arry[i]);
printf("\n");
getchar();
return 0;
}
在结构体中使用回调函数
#include <stdio.h>
typedef struct stu {
char name[20];
int age, score[3];
int (*sum) (struct stu);
float (*avg) (struct stu);
}Student;
int sum(Student S) {
int i, sum = S.score[0];
for (i = 1; i < 3; ++i)
sum += S.score[i];
return sum;
}
float avg(Student S) {
return sum(S) / 3.0;
}
void main() {
Student S = {
.name = "小明",
.age = 24,
.score = {
82,87,94
},
.sum = sum,
.avg = avg
};
printf("姓名:%s\n",S.name);
printf("年龄:%d\n",S.age);
printf("总分:%d\n",S.sum(S));
printf("平均分:%.2f\n",S.avg(S));
}