C语言指向函数的指针
定义形式:类型 (*指针变量名)(参数列表);
例如: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 %d\n",ret);
ret = compare(i,j,GET_MIN);
printf("The MIN is %d\n",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("Equal\n");
else
printf("Not Equal\n");
}
示例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;
}
C语言指向函数的指针的更多相关文章
- C语言——指向函数的指针
转载自:http://www.cnblogs.com/liangyan19910818/archive/2011/08/19/2145270.html C语言——指向函数的指针 函数类型 (* 函数指 ...
- C语言 指向函数的指针
#include <stdio.h> int sum(int a, int b) { int c = a + b; printf("%d + %d = %d\n", a ...
- 【C语言】14-返回指针的函数与指向函数的指针
前言 前面我们花了接近3个章节学习指针,应该都感受到指针的强大了吧.指针可以根据地址直接操作内存中的数据,使用得当的话,不仅能使代码量变少,还能优化内存管理.提升程序性能.关于指针的内容还非常多,比如 ...
- 【C语言】-返回指针的函数与指向函数的指针
本文目录 前言 一.返回指针的函数 二.指向函数的指针 说明:这个C语言专题,是学习iOS开发的前奏.也为了让有面向对象语言开发经验的程序员,能够快速上手C语言.如果你还没有编程经验,或者对C语言.i ...
- C语言基础语法之指向函数的指针
指针是C语言的精髓,对于初学者来讲,指针是C语言语法学习中比较难的知识点,而这里面指向函数的指针更是不太容易理解. 下面给大家讲下怎样学习理解C语言中指向函数的指针及编程方法和使用例子. 注意:这是一 ...
- C语言中 指向函数的指针 简介
引子:在学习CPrimerPlus的第十四章的14.13节中,遇到了如下三行文字,是有关指向函数的指针的,把我搞晕了. char * fump(); //返回指向char的指针的函数 char (* ...
- 【学习笔记】【C语言】指向函数的指针
每个函数都有自己的内存地址,指针保存了函数的地址后就能指向函数了. #include <stdio.h> double haha(double d, char *s, int a) { } ...
- 12-返回指针的函数&&指向函数的指针
前言 接下来我只讲指针的最常见用法,比如这一章的内容----返回指针的函数 与 指向函数的指针 一.返回指针的函数 指针也是C语言中的一种数据类型,因此一个函数的返回值肯定可以是指针类型的. 返回 ...
- 指向函数的指针与iOS-Block相关知识
指向函数的指针与iOS-Block相关知识 一. 函数指针的定义和调用: 关于函数指针的知识详细可参考:http://www.cnblogs.com/mjios/archive/2013/03/19/ ...
随机推荐
- ajax+vue简单使用
<script type="text/javascript" src="http://cdn.bootcss.com/vue/2.2.2/vue.min.js&qu ...
- shell $x的含义
linux中shell变量$#,$@,$0,$1,$2的含义解释: 变量说明: $$ Shell本身的PID(ProcessID) $! Shell最后运行的后台Process的PID $? 最后运行 ...
- IIS下配置Php+Mysql+zend的图文教程(完整版)
网上有很多关于PHP在IIS下配置的教程,但都是一些很理性化的东西,我从里面整理出来这个教程 发出来为了方便参考,,有什么问题也可以大家一起交流,,如果有什么不对的地方,请指正.. 下面的教程都是在w ...
- hOW TO READING
人脑是易忘的,新知识要不断复习,一本600页的书,总结出来要记住的知识可能只有30页.一段2小时的技术视频,总结到纸上可能只有10分钟的阅读量.那么如何复习这600页的书和2小时的视频呢? 答案就是总 ...
- Flask拾遗总汇1
目录 1.flask的路由分发方式 2.请求响应相关 3.flask配置文件拾遗(config) 4.路由系统参数配置 4.1 可传入参数: 4.2 常用路由系统有以上五 5.反向生成URL: url ...
- Flask中before_request与after_request使用
目录 1.前提,装饰器的弊端 2.before_request与after_request 2.1 before_request分析: 2.2 after_request分析: 3.before_re ...
- 跳过__wakeup()魔法函数
__wakeup():将在序列化之后立即被调用. 漏洞原理:当反序列化字符串中,表示属性个数的值大于其真实值,则跳过__wakeup()执行. 参考题目:xctf-unserialize3 h ...
- Fluter基础巩固之Dart语言详解<三>
继续Dart语言的学习,这次过后下次就进入全新的Flutter的学习了,小小的激动.. 操作符重载: C++中也有,咱们来看一下在Dart中是如何来实现的: 比较简单. 异步[重要!]: async和 ...
- LCD编程_简单测试
首先,需要编写一个led_test.c的文件,依据代码框架,在led_test.c中我们能够看到的只是led.c.我们是看不到led_controller.c的.比如说,在led_test.c中,需要 ...
- Consul 学习资料
资料 网址 Consul 入门指南 https://book-consul-guide.vnzmi.com/