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 ...
随机推荐
- c++实现冒泡排序
# include<iostream> #include<stdio.h> using namespace std; void maopao(int *list){ int i ...
- Linux shell之打印输出
介绍 经常需要和shell命令打交道,但是一直没有系统的学习,接下来会花1到2个月的时间系统的学习一下shell命令,接下来就开启shell命令的奇妙旅行吧.本章主要介绍shell的打印输出. 知识要 ...
- swagger:The World's Most Popular Framework for APIs.
swagger官网:http://swagger.io/ swagger ui demo:http://petstore.swagger.io 让API文档总是与API定义同步更新,是一件非常有价值的 ...
- Andrew Ng机器学习公开课笔记 -- 支持向量机
网易公开课,第6,7,8课 notes,http://cs229.stanford.edu/notes/cs229-notes3.pdf SVM-支持向量机算法概述, 这篇讲的挺好,可以参考 先继 ...
- Android开发学习之路-GSON使用心得(OCR图片识别)
在安卓中解析JSON串可以使用的方法有很多,比如说用官方提供的JSONObject或者谷歌提供的开源库GSON,以及一些第三方开源库. 这里用的是GSON,为了测试方便,借助了一个百度的api,一个图 ...
- [源码解析]HashMap和HashTable的区别(源码分析解读)
前言: 又是一个大好的周末, 可惜今天起来有点晚, 扒开HashMap和HashTable, 看看他们到底有什么区别吧. 先来一段比较拗口的定义: Hashtable 的实例有两个参数影响其性能:初始 ...
- Atitit vod click event design flow 视频点播系统点击事件文档
Atitit vod click event design flow 视频点播系统点击事件文档 重构规划1 Click cate1 Click mov4 重构规划 事件注册,与事件分发管理器分开 ...
- “胡”说IC——菜鸟工程师完美进阶
“胡”说IC——菜鸟工程师完美进阶(数十位行业精英故事分享,顶级猎头十多年来经验总结,对将入或初入IC电子业“菜鸟”职业发展.规划的解惑和点拨.) 胡运旺 编著 ISBN 978-7-121-22 ...
- Asp.net WebApi 项目示例(增删改查)
1.WebApi是什么 ASP.NET Web API 是一种框架,用于轻松构建可以由多种客户端(包括浏览器和移动设备)访问的 HTTP 服务.ASP.NET Web API 是一种用于在 .NET ...
- Java Annotation 总结
Annotation 被称为注解,在Java开发中是相当常见的,通过注解,我们可以简化代码提高开发效率.例如Override Annotation,这个应该算是在开发过程中使用最多的注解了.下面这个例 ...