C语言学习019:函数指针
在C语言中,函数名也是指针变量,比如创建了一个add(int n,int m)的函数的同时也创建了一个名为add的指针变量,因此我们可以把函数指针当作一种类型为它赋值、当作参数传递等操作
C语言创建函数指针的公式:
返回类型 (*指针变量)(参数类型)
#include <stdio.h>
int add(int n,int m){
return n+m;
}
int sub(int n,int m){
return n-m;
}
int main(){
int n=;
int m=;
int (*calculate)(int,int);//创建一个名为calculate的变量
calculate=add;
int result=calculate(n,m);//相当于add(n,m);
printf("%i\n",result);
calculate=sub;
result=calculate(n,m);//相当于sub(n,m);
printf("%i\n",result);
return ;
}
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAoYAAAAoCAIAAADsYayZAAABUElEQVR4nO3bwU3DMBSAYa/EJBwIwzBKOgfcOwPTPFUcOABqRONUkRr7Nf0+5ZZDrFx+OS8ur4fTz/Xx+fX0/Fbux3Fi3w/dMe9zmfcDjyMiyv0mGQB2Q5IBIAVJBoAUJBkAUpBkAEhhKcn//vA8Xmi8VgDYsWqSL6MrwwCwnZkk1/bBkgwA27FLBoAUVifZIBkAtrAiyVOqDAC3FRFlkGQA6O03ycPKWbIkA8BtzSR54fyxWTIAbKS6SwYAWpJkAEhBkgEghXOSh8PpXZIBoBNJBoAUJBkAUoiIMoySDACd/SV5PCd54VwyALCRapJ7LwwAHsskyaMkA0A3kgwAKVSTbJAMAC3NJHl6W5UBoA1JBoAUrsySJRkA2pjfJZslA0BjVz5cAwBtSDIApCDJAJCCJANACpIMAClIMgCkIMkAkIIkA0AKEVFeJBkAeouIb47Kvp70dRa6AAAAAElFTkSuQmCC" alt="" />
虽然函数指针是指针,但是在使用的时候我们可以省略"*"的写法比如上面的calculate(n,m),我们不必写成(*calculate)(n,m);需要注意的是函数指针只接受和它的返回值和参数都相同的函数地址
函数指针数组
#include <stdio.h>
enum response_type{DUMP,SECOND_CHANCE,MARRIAGE};
typedef struct{
char *name;
enum response_type type;
} response;
void dump(response r){
printf("dump %s\n",r.name);
}
void second_chance(response r){
printf("second_chance %s\n",r.name);
}
void marriage(response r){
printf("marriage %s\n",r.name);
}
int main(){
response r[]={{"Mike",DUMP},{"Luis",SECOND_CHANCE},{"Matt",SECOND_CHANCE},{"William",MARRIAGE}};
void (*replies[])(response)={dump,second_chance,marriage};//创建函数指针数组
int i;
for(i=;i<;i++){
replies[r[i].type](r[i]);
}
return ;
}
C语言学习019:函数指针的更多相关文章
- 1、C语言中的函数指针
一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...
- 函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)
记得刚开始工作时,一位高手告诉我说,longjmp和setjmp玩得不熟,就不要自称为C语言高手.当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法.后 ...
- Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针
Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针 1.1. java方法引用(Method References) 与c#委托与脚本语言js ...
- C++学习之函数指针
C++学习之函数指针 和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...
- C语言中的函数指针
C语言中的函数指针 函数指针的概念: 函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...
- 利用C语言中的函数指针实现c++中的虚函数
C语言中的函数指针 #include<stdio.h> int fun1(int a) { return a*a; } int fun2(int a) { return a*a*a; } ...
- C语言学习笔记--函数与指针
1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...
- 策略设计模式与c语言中的函数指针
在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体 ...
- C语言复杂的函数指针声明
复习C语言ING,发现复杂的函数指针声明看不懂,百度半天终于略知一二. 讲的比较详细的一篇blog: http://blog.csdn.net/megaboy/article/details/4827 ...
随机推荐
- 在WebApi中基于Owin OAuth使用授权发放Token
如何基于Microsoft.Owin.Security.OAuth,使用Client Credentials Grant授权方式给客户端发放access token? Client Credentia ...
- 使用FiddlerCore来测试WebAPI
大家在调试Web相关的API时,经常会用Fiddler来查看相关的请求,以及返回结果.当然你也可以尝试修改或者重复你的请求信息.本文主要介绍如何使用代码来实现fiddler的功能. Fiddler C ...
- Unity3D大风暴之入门篇(海量教学视频版)
智画互动开发团队 编 ISBN 978-7-121-22242-9 2014年2月出版 定价:79.00元 328页 16开 编辑推荐 长达800分钟的高清教学视频,手把手教会初学者 数个开发案例 ...
- iOS-远程推送
说到远程推送,应该用的也挺多的,今天就基于SEA的云推送服务,做一个推送的小demo,来了解一下iOS中的远程推送是怎么一回事儿,首先你得有苹果的开发者账号,好咸蛋也差不多了,主要内容走起. 一.准备 ...
- MySQL5.7.13源代码阅读心得
1.使用gdb这个调试工具. 在linux使用该调试工具非常简单.它的价值非常大,可以告诉你函数相互调用的逻辑(bt命令),告诉你函数执行的情况(通过br命令以及n,c命令单步跟踪函数每一个语句的执行 ...
- KnockoutJS 3.X API 第二章 数据监控(1)视图模型与监控
数据监控 KO的三个内置核心功能: 监控(Observable)和依赖性跟踪(dependency tracking) 声明绑定(Declarative bindings) 模板(Templating ...
- TSQL order by 子句中排序列的多种写法
Order by 子句用于对结果进行排序,执行顺序位于select子句之后,排序列有4中写法: column_name column_alias,由于order by子句的执行顺序位于select子句 ...
- initial、inherit、unset、revert和all
前面的话 在CSS中,有4个关键字理论上可以应用于任何的CSS属性,它们是initial(初始).inherit(继承).unset(未设置).revert(还原).而all的取值只能是以上这4个关键 ...
- 自己的JS框架--Amy框架。
这是我根据司徒正美<JavaScript框架设计>一书然后百度了很多东西之后自己写的一个JS框架,满足了司徒正美文中的种子模块部分,包含了命名空间.对象扩展.数组化.类型判断.选择器.多库 ...
- 12个免费的 Twitter Bootstrap 后台模板
在互联网上提供很多免费的 Bootstrap 管理后台主题.所有你需要做的就是将它们下载并安装它们,这真的不是什么难事.问题是如何寻找到能够完美符合您的网站需求的主题.当然,你可以自己制作自定义的主题 ...