函数指针的用法,函数指针怎么用

1 , 函数指针怎么用函数指针?就是指向函数的指针,指针你知道吗?把函数看作一种类型 , 函数指针就指向函数这种类型的指针 。你怎么没有看到灵活性呢?那我直接用函数名就调用了呀,为什么还要去转一次?也许下面的代码对你有赞助?type fProc=function:integer;function FuncA:integer;beginbegin result:=1;end;function FuncB:integer;begin result:=2;end;procedure TForm1.Button1Click(Sender: TObject);var proc:fProc; proc:=FuncA; showmessage(inttostr(proc)); proc:=FuncB; showmessage(inttostr(proc));end;type T1=function:integer;var函数指针拿来干什么?比如, f:T1;有什么意思?我总看不出它拿来干什么 。当然,我的只是作为一个弥补罢了 , 你没有贴出调用DLL的代码,我也就免了 。:)To Nicrosoft(奈软):
2,求指针函数的使用1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少,后面的“形参列表”表示指针变量指向的函数所带的参数列表 。例如:int (*f)(int x);double (*ptr)(double x);在定义函数指针时请注意:函数指针和它指向的函数的参数个数和类型都应该是—致的;函数指针的类型和函数的返回值类型也必须是一致的 。2.函数指针的赋值函数名和数组名一样代表了函数代码的首地址,因此在赋值时 , 直接将函数指针指向函数名就行了 。例如,int func(int x);/* 声明一个函数 */int (*f) (int x);/* 声明一个函数指针 */f=func;/* 将func函数的首地址赋给指针f */赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址 。3.通过函数指针调用函数函数指针是通过函数名及有关参数进行调用的 。与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针,则*pf就等价于它所指的变量f 。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func 。所以在执行了f=func;之后,(*f)和func代表同一函数 。由于函数指针指向存储区中的某个函数 , 因此可以通过函数指针调用相应的函数 。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:首先,要说明函数指针变量 。例如:int (*f)(int x);其次,要对函数指针变量赋值 。例如: f=func;(func(x)必须先要有定义)最后 , 要用 (*指针变量)(参数表);调用函数 。例如:(*f)(x);(x必须先赋值)【例】任意输入n个数 , 找出其中最大数,并且输出最大数值 。main()int f();int i,a , b;int (*p)();/* 定义函数指针 */scanf("%d",&a);p=f;/* 给函数指针p赋值,使它指向函数f */for(i=1;i<9;i++)scanf("%d",&b);a=(*p)(a,b);/* 通过指针p调用函数f */}printf("The Max Number is:%d",a)}f(int x,int y)int z;z=(x>y)?x:y;return(z);}运行结果为:343 -45 4389 4235 1 -534 988 555 789↙The Max Number is:4389【指针函数】一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元 。返回指针的函数,一般定义格式为:类型标识符*函数名(参数表)int *f(x,y);其中x,y是形式参数 , f是函数名,调用后返回一个指向整型数据的地址指针 。f(x,y)是函数,其值是指针 。如:char *ch();表示的就是一个返回字符型指针的函数,请看下面的例题:【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.#include "stdio.h"main()char *ch(char *,char *);char str1[]="I am glad to meet you!";char str2[]="Welcom to study C!";printf("%s",ch(str1,str2));}char *ch(char *str1,char *str2)int i;char *p;p=str2if(*str2==NULL) exit(-1);do*str2=*str1;str1++;str2++;}while(*str1!=NULL);return(p);}通过分析可得函数指针是一个指向函数的指针,而指针函数只是说明他是一个返回值为指针的函数,函数指针可以用来指向一个函数 。指针函数你就看成为指针就可以了 。如void test(void);指针函数他就可以定义为,typedef void (*Ttest)(void);用的时候就可以:Ttest pFunc = test;//或者为DLL的导出函数在强制Ttest转换一下就可以了 。指针函数是指函数的返回值类型是一个指针类型,1楼的好像说错了,慎重,看看我给的链接,希望对你有帮助,
3,函数指针的使用求救up函数有问题 , sizeof(a)的值始终是4,并不因为数组有多少个元素,因为这时候a只是记录的数组的起始地址 , 占4个字节 。通常在传一个参数,int n,用作记录数组的个数 。还有有的编译系统你写int p[],可能不会通过,不妨改成int *p;这两个意思一样 , 而且其他的都不要该 。你这样再试试1.函数指针定义函数类型 (*指针变量名)(形参列表);“函数类型”说明函数的返回类型,由于“()”的优先级高于“*”,所以指针变量名外的括号必不可少 , 后面的“形参列表”表示指针变量指向的函数所带的参数列表 。例如:int (*f)(int x);double (*ptr)(double x);在定义函数指针时请注意:函数指针和它指向的函数的参数个数和类型都应该是—致的;函数指针的类型和函数的返回值类型也必须是一致的 。2.函数指针的赋值函数名和数组名一样代表了函数代码的首地址 , 因此在赋值时,直接将函数指针指向函数名就行了 。例如 , int func(int x);/* 声明一个函数 */int (*f) (int x);/* 声明一个函数指针 */f=func;/* 将func函数的首地址赋给指针f */赋值时函数func不带括号,也不带参数 , 由于func代表函数的首地址 , 因此经过赋值以后,指针f就指向函数func(x)的代码的首地址 。3.通过函数指针调用函数函数指针是通过函数名及有关参数进行调用的 。与其他指针变量相类似,如果指针变量pi是指向某整型变量i的指针,则*p等于它所指的变量i;如果pf是指向某浮点型变量f的指针 , 则*pf就等价于它所指的变量f 。同样地,*f是指向函数func(x)的指针,则*f就代表它所指向的函数func 。所以在执行了f=func;之后,(*f)和func代表同一函数 。由于函数指针指向存储区中的某个函数 , 因此可以通过函数指针调用相应的函数 。现在我们就讨论如何用函数指针调用函数,它应执行下面三步:首先,要说明函数指针变量 。例如:int (*f)(int x);其次,要对函数指针变量赋值 。例如: f=func;(func(x)必须先要有定义)最后,要用 (*指针变量)(参数表);调用函数 。例如:(*f)(x);(x必须先赋值)【例】任意输入n个数,找出其中最大数,并且输出最大数值 。main()int f();int i,a,b;int (*p)();/* 定义函数指针 */scanf("%d" , &a);p=f;/* 给函数指针p赋值,使它指向函数f */for(i=1;i<9;i++)scanf("%d" , &b);a=(*p)(a,b);/* 通过指针p调用函数f */}printf("the max number is:%d",a)}f(int x,int y)int z;z=(x>y)?x:y;return(z);}运行结果为:343 -45 4389 4235 1 -534 988 555 789↙the max number is:4389【指针函数】一个函数不仅可以带回一个整型数据的值,字符类型值和实型类型的值,还可以带回指针类型的数据,使其指向某个地址单元 。返回指针的函数,一般定义格式为:类型标识符*函数名(参数表)int *f(x,y);其中x,y是形式参数 , f是函数名,调用后返回一个指向整型数据的地址指针 。f(x,y)是函数,其值是指针 。如:char *ch();表示的就是一个返回字符型指针的函数,请看下面的例题:【例】将字符串1(str1)复制到字符串2(str2),并输出字符串2.#include "stdio.h"main()char *ch(char *,char *);char str1[]="i am glad to meet you!";char str2[]="welcom to study c!";printf("%s",ch(str1,str2));}char *ch(char *str1 , char *str2)int i;char *p;p=str2if(*str2==null) exit(-1);do*str2=*str1;str1++;str2++;}while(*str1!=null);return(p);}通过分析可得函数指针是一个指向函数的指针 , 而指针函数只是说明他是一个返回值为指针的函数,函数指针可以用来指向一个函数 。cout<void (* f)(int t[]);//这句是做什么用的??一直没见到!【函数指针的用法,函数指针怎么用】

    推荐阅读