c/c++语言开发共享C语言指向函数的指针

定义形式: 例如: 在这里 int是函数的返回类型, p是指向函数的指针,(int i,int j);是函数的参数 注意 : int f(int i, int j); int ( p)(int i, int j); 前者是返回值是指针的函数;后者是一个指向函数的指针。 示例1 示例2 函数指针作为参 …

定义形式:类型 (*指针变量名)(参数列表);
例如:int (*p)(int i,int j);

在这里 int是函数的返回类型,*p是指向函数的指针,(int i,int j);是函数的参数


注意 : int f(int i, int j);
int (
p)(int i, int j);
前者是返回值是指针的函数;后者是一个指向函数的指针。

示例1

#include <stdio.h>   #define  get_max    0 #define  get_min    1   int get_max(int i,int j) {     return i>j?i:j; }   int get_min(int i,int j) {     return i>j?j:i; }   int compare(int i,int j,int flag) {     int ret;       //这里定义了一个函数指针,就可以根据传入的flag,灵活地决定其是指向求大数或求小数的函数     //便于方便灵活地调用各类函数     int (*p)(int,int);       if(flag == get_max)     {         p = get_max;     }else{         p = get_min;     }     ret = p(i,j);//或者ret =  (*p)(i,j);     return ret; }   int main() {     int i = 5,j = 10,ret;     ret = compare(i,j,get_max);     printf("the max is %dn",ret);     ret = compare(i,j,get_min);     printf("the min is %dn",ret);     return 0 ; }

示例2 函数指针作为参数

/**     比较两个字符串,相等返回equal,不相等返回not equal **/ #include <stdio.h> #include <string.h>   void check(char *a,char *b,int (*cmp)(const char *,const char *));   int main() {     char s1[80],s2[80];     int (*p)(const char *,const char *);       //将库函数strcmp的地址赋值给函数指针p     p=strcmp;       printf("请输入两个字符串.n");     gets(s1);     gets(s2);       check(s1,s2,p);     return 0; }   void check(char *a,char *b,int (*cmp)(const char *,const char *)) {     printf("testing for equality.n");     //表达式(*cmp)(a,b)调用strcmp,由cmp指向库函数strcmp(),由a和b作调用strcmp()的参数。     //调用时,与声明的情况类似,必须在*cmp周围使用一对括号,使编译程序正确操作     if((*cmp)(a,b)==0)         printf("equaln");     else         printf("not equaln"); } 

示例3

 #include <stdio.h> #include <ctype.h> #include <stdlib.h> #include <string.h>   //check()函数的第3个函数是函数指针,就可以根据具体情况传入不同的处理函数 void check(char *a,char *b,int (*cmp)(const char *,const char *));   //自定义的比较两个字符串的函数 int compvalues(const char *a,const char *b);   int main() {     char s1[80],s2[80];     printf("输入两个数字或自妇产n");     gets(s1);     gets(s2);     if(isdigit(*s1)){   //如果是数字,则用函数指针传入数字比较函数进行处理         printf("testing values for equality.n");         check(s1,s2,compvalues);     }else{//如果是字符串,则用函数指针传入库函数strcmp进行处理         printf("testing strings for equality.n");         check(s1,s2,strcmp);     } }   void check(char *a,char *b,int (*cmp)(const char *,const char *)) {     if((*cmp)(a,b)==0)         printf("equal.n");     else         printf("not equal.n"); }   int compvalues(const char *a,const char *b) {     if(atoi(a) == atoi(b))         return 0;     else         return 1; }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/601733.html

(0)
上一篇 2021年5月10日
下一篇 2021年5月10日

精彩推荐