重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
c语言中叫做回调函数,将函数指针(如max)作为函数的参数,函数(如fun)中调用这个参数指向的函数,
创新互联是一家专业提供永济企业网站建设,专注与网站设计、做网站、HTML5、小程序制作等业务。10年已为永济众多企业、政府机构等服务。创新互联专业的建站公司优惠进行中。
调用函数(fun)时看情况而给函数传入不同的函数指针
例如fun(a,b,min),那么fun函数调用执行三个参数就调用min函数
参数的定义要与传入的函数指针相匹配
例如fun(int,x,int y,(*p)(int,int)) 那么调用fun(a,b,min)时,min的参数必须是(int ,int)
#include stdio.h
int f1(int (*f)(int));//函数指针
int f2(int i);
int main(void)
{
printf("Answer:%d\n",f1(f2));//指向f2
return 0;
}
int f1(int (*f)(int))//定义函数指针
{
int n=0;
while((*f)(n)) n++;//回调函数,当指针不是NULL时,代入n
return 0;
}
int f2(int i)
{
return i*i+i-12;
}
//也就是每个函数入口都是一个地址
//函数无它,唯指令集合而已,上面只是换个地址执行指令而已
选B
f是一个变量,不是函数名字,所以不选D
int* f;这样才是指向int类型的指针,所以A错
#include stdio.h
#include stdlib.h
#include string.h
void virtualFun(int choice, int n, char *str[], char *(*p)(int , char **));
char *maxs(int n, char *s[]); //此函数通过指向函数的指针调用
char *mins(int n, char *s[]); //此函数通过指向函数的指针调用
char *minc(int n,char *s[]); //此函数通过指向函数的指针调用
void Menu();
char *(*func)(int n, char **);
int main() {
char *name[]={"FOLLOW ME","BASIC","GREAT WALL ","FORTRAN","COMPUTER DESIGN"};
int n=5;
char ch=0;
while (ch!=4) {
Menu();
ch = getchar();
getchar();//ignore '\n'
ch = ch - '0';
virtualFun(ch, n, name, func);
}
return 0;
}
void virtualFun(int choice, int n, char *str[], char *(*p)(int n, char **name)) {
switch(choice) {
case 1: //max string
p = maxs;
break;
case 2:
p = mins;
break;
case 3:
p = minc;
printf("[result is :%c]\n", *p(n, str)); //because the return is a char
default:
return;
}
printf("[result is :%s]\n", p(n, str));
}
char *maxs(int n, char *s[]) {
int i;
char *max = s[0];
for (i=1;in;i++) {
if (strcmp(max, s[i])0)
max = s[i];
}
return max;
}
char *mins(int n, char *s[]) {
int i;
char *min = s[0];
for (i=1;in;i++) {
if (strcmp(min, s[i])0)
min = s[i];
}
return min;
}
char *minc(int n, char *s[]) {
int i;
char ch = s[0][0], *p, *r=s[0];
for (i=0;in;i++) {
p = s[i];
while(*p++) {
if (*p0x20 ch*p) {
ch = *p;
r = p;
}
}
}
return r;
}
void Menu() {
char menu[] = "1 max string\n\
2 min string\n\
3 min char \n\
4 exit\n";
printf("%s", menu);
}