C语言技巧—怎样使用指向函数的指针?
在使用指向函数的指针时,最难的一部分工作是说明该指针。例如,strcmp()函数的说明如下所示:
int strcmp(const char*,const char*);
如果你想使指针pf指向strcmp()函数,那么你就要象说明strcmp()函数那样来说明pf,但此时要用*pf代替strcmp:
int (*pr)(const char*,const char*);
请注意,*pf必须用括号括起来,因为
int *p{ (constchar * ,constchar * ); /* wrong */
等价于
(int *)pr(const char *,const char * ); /* wrong */
它们都只是说明了一个返回int *类型的函数。
在说明了pf后,你还要将<string.h>包含进来,并且要把strcmp()函数的地址赋给pf,即:
pf=strcmp;
或
pf=Slstrcmp; /* redundant& */
此后,你就可以通过间接引用pf来调用strcmp()函数:
if(pr(strl,str2)>0) /*...*/
int strcmp(const char*,const char*);
如果你想使指针pf指向strcmp()函数,那么你就要象说明strcmp()函数那样来说明pf,但此时要用*pf代替strcmp:
int (*pr)(const char*,const char*);
请注意,*pf必须用括号括起来,因为
int *p{ (constchar * ,constchar * ); /* wrong */
等价于
(int *)pr(const char *,const char * ); /* wrong */
它们都只是说明了一个返回int *类型的函数。
在说明了pf后,你还要将<string.h>包含进来,并且要把strcmp()函数的地址赋给pf,即:
pf=strcmp;
或
pf=Slstrcmp; /* redundant& */
此后,你就可以通过间接引用pf来调用strcmp()函数:
if(pr(strl,str2)>0) /*...*/