符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
#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);
}
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)
01
指针函数通常是指函数返回值是指针的一类函数,如图所示。
02
函数指针是指指向某个具体函数的指针变量,在程序设计时可以用来调用某个特定函数或者做某个函数的参数。其形式一般如图:
03
指针函数与函数指针本质上的区别是,指针函数是一个带指针的函数,总的来说还是一个函数,如图就是一个带*name指针的函数
04
函数指针是指向函数的指针变量,本质上还是一个指针,其格式如下,可以看到和指针函数的格式非常像,所以一定要用心留意。
函数指针就是一个函数的首地址,这个在汇编里面最好看明白了.
比如:int * a (int i, int j) ; 假设a的值是:0x3312FF80,,下面是汇编调用的例子.
push j
push i
call 0x33FF80
上面是调用方法,而int* a(int i, int j); 的返回值也很容易看出来,返回一个DWORD类型的一个指针而已.反汇编应该是 return n;这里的n是四个字节,应为返回是一个指针类型,在32位下指针就是4字节.
我有仔细研究了下你的问题,你是弄不明白 int* a() 和int (*p)() 吗?还是别的什么意思?请继续追问.
是否可以解决您的问题?