C语言中函数指针与普通指针没什么差别,只是指向的内容不同而已。主要作用:
创新互联拥有10多年成都网站建设工作经验,为各大企业提供网站设计制作、网站建设服务,对于网页设计、PC网站建设(电脑版网站建设)、成都App制作、wap网站建设(手机版网站建设)、程序开发、网站优化(SEO优化)、微网站、国际域名空间等,凭借多年来在互联网的打拼,我们在互联网网站建设行业积累了很多网站制作、网站设计、网络营销经验,集策划、开发、设计、营销、管理等网站化运作于一体,具备承接各种规模类型的网站建设项目的能力。
1、实现面向对象编程中的多态性。
2、回调函数。
函数指针是指向函数的指针变量。 因此“函数指针”本身首先应是指针变量,只不过该指针变量指向函数。这正如用指针变量可指向整型变量、字符型、数组一样,这里是指向函数。
C在编译时,每一个函数都有一个入口地址,该入口地址就是函数指针所指向的地址。有了指向函数的指针变量后,可用该指针变量调用函数,就如同用指针变量可引用其他类型变量一样,在这些概念上是大体一致的。
函数指针有两个用途:调用函数和做函数的参数。
#include
stdio.h
void
main()
{
int
max(int
,int
);
int
(*p)(int
,int);
p=max;
//此处利用
p=max是正确的指向函数的指针的用法,p指向max的入口地址
//此处用*p=max得到相同结论,为什么呢?因为你这样赋值之后*p的内容就是max
//所以在执行(*p)(q,w)它时其实是执行的(max)(q,w),如果是p=max此时执行(*p)(q,w)是等价于执行max(q,w)。
int
q,w;
printf("please
input
the
two
numbers:\n");
scanf("%d%d",q,w);
printf("the
larger
number
is:%d",(*p)(q,w));
}
////////////////////////////////////
int
max(int
a,int
b)
{
if(ab)
return
a;
else
return
b;
}
c语言中叫做回调函数,将函数指针(如max)作为函数的参数,函数(如fun)中调用这个参数指向的函数,
调用函数(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
#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);
}
选B
f是一个变量,不是函数名字,所以不选D
int* f;这样才是指向int类型的指针,所以A错