C函数指针简单用例
(1)函数指针:
可以指向 一类 固定形参类型和返回值类型 的函数 的指针
声明:
int fun(int, int)
||
\/
int (*pfun)(int, int)
pfun就是函数指针(变量)
调用:
d = pfun(a, b);
e = (*pfun)(a, b);
#####指针函数
int *fun(int, int);
int *(fun(int, int));
#####
/*ex01.c*/
#include <stdio.h>
int max(int a, int b) {
return (a > b ? a : b);
}
int min(int a, int b) {
return (a < b ? a : b);
}
int main(int argc, char *argv[]) {
int (*pfun)(int, int);
pfun = max;
int a = 0, b = 0, c = 0, d = 0, e = 0;
fscanf(stdin, "%d%d", &a, &b);
c = max(a, b);
d = pfun(a, b);
e = (*pfun)(a, b);
fprintf(stdout, "%d\n", c);
fprintf(stdout, "%d\n", d);
fprintf(stdout, "%d\n", e);
return 0;
}
(2)定义函数指针的类型 可以声明函数指针变量
typedef int (*Pfun)(int, int);
Pfun就是自定义函数指针类型
Pfun pfun = min;
创建Pfun类型变量pfun并将min函数赋值它
/*ex02.c*/
#include <stdio.h>
typedef int (*Pfun)(int, int);
int max(int a, int b) {
return (a > b ? a : b);
}
int min(int a, int b) {
return (a < b ? a : b);
}
int main(int argc, char *argv[]) {
Pfun pfun = min;
int a = 0, b = 0, c = 0, d = 0, e = 0;
fscanf(stdin, "%d%d", &a, &b);
c = min(a, b);
d = pfun(a, b);
e = (*pfun)(a, b);
fprintf(stdout, "%d\n", c);
fprintf(stdout, "%d\n", d);
fprintf(stdout, "%d\n", e);
return 0;
}
(3)可以将函数作为参数传入另一函数
#include <stdio.h>
typedef int (*Pfun)(int, int);
int max(int a, int b) {
return (a > b ? a : b);
}
int min(int a, int b) {
return (a < b ? a : b);
}
int dofun(Pfun pfun, int a, int b) { //用Pfun类型的函数指针变量pfun接收传入的函数
return pfun(a, b);
}
int main(int argc, char *argv[]) {
Pfun pfun = min;
int a = 0, b = 0, c = 0, d = 0, e = 0, f = 0;
fscanf(stdin, "%d%d", &a, &b);
c = min(a, b);
d = pfun(a, b);
e = (*pfun)(a, b);
f = dofun(min, a, b); //将min函数作为参数传入dofun,dofun用相应类型的函数指针接收
fprintf(stdout, "%d\n", c);
fprintf(stdout, "%d\n", d);
fprintf(stdout, "%d\n", e);
fprintf(stdout, "%d\n", e);
return 0;
}