在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 ;
}

最新文章

  1. .Net 高效开发之不可错过的实用工具
  2. Android Studio NDK初探
  3. 【整理】--【KERNEL】内核定时器
  4. Wix 安装部署教程(四) 添加安装文件及快捷方式
  5. SQL查询语句去除重复行
  6. C基础--C语言的数组
  7. 一个NULL引发的血案
  8. 使用Perl5获取有道词典释义
  9. 解决load 函数无法赋予变量名的问题
  10. AQuery简介:jQuery for Android
  11. HDU3853
  12. 复习-C语言内嵌汇编-初级(1)
  13. MySQL基础学习笔记
  14. STL源码剖析-vector
  15. POSIX信号量
  16. AI零基础入门之人工智能开启新时代—下篇
  17. PSP(4.20——4.26)以及周记录
  18. Play on Words HDU - 1116(欧拉路判断 + 并查集)
  19. day5 python
  20. Js 模式匹配

热门文章

  1. .NET轻量级MVC框架:Nancy入门教程(一)——初识Nancy
  2. Nunit工具做C#的单元测试
  3. Unity3D热更新全书-下载 唯一的一篇
  4. kafka的一些认识
  5. 30分钟带你快速入门MySQL教程
  6. MVVM架构~knockoutjs系列之正则表达式使规则更灵活
  7. iOS—网络实用技术OC篇&amp;网络爬虫-使用java语言抓取网络数据
  8. ASP.NET MVC3 模板页的使用
  9. Android 控件架构及View、ViewGroup的测量
  10. 学习ASP.NET MVC(一)——我的第一个ASP.NET MVC应用程序