在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. 1、C语言中的函数指针

    一 通常的函数调用 void MyFun(int x); //此处的申明也可写成:void MyFun( int ); int main(int argc, char* argv[]) { MyFun ...

  2. 函数指针玩得不熟,就不要自称为C语言高手(函数指针是解耦对象关系的最佳利器,还有signal)

    记得刚开始工作时,一位高手告诉我说,longjmp和setjmp玩得不熟,就不要自称为C语言高手.当时我半信半疑,为了让自己向高手方向迈进,还是花了一点时间去学习longjmp和setjmp的用法.后 ...

  3. Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针

    Atitit java方法引用(Method References) 与c#委托与脚本语言js的函数指针   1.1. java方法引用(Method References) 与c#委托与脚本语言js ...

  4. C++学习之函数指针

     C++学习之函数指针          和数据项类似,函数也有地址,函数的地址是存储在机器语言代码的内存的开始地址.通常,这些地址对用户而言,不重要也没什么用处,但对程序而言,它却很有用. 一.函数 ...

  5. C语言中的函数指针

    C语言中的函数指针 函数指针的概念:   函数指针是一个指向位于代码段的函数代码的指针. 函数指针的使用: #include<stdio.h> typedef struct (*fun_t ...

  6. 利用C语言中的函数指针实现c++中的虚函数

    C语言中的函数指针 #include<stdio.h> int fun1(int a) { return a*a; } int fun2(int a) { return a*a*a; } ...

  7. C语言学习笔记--函数与指针

    1. 函数类型 (1)C 语言中的函数有自己特定的类型,这个类型由返回值.参数类型和参数个数共同决定.如 int add(int i,int j)的类型为 int(int,int). (2)C 语言中 ...

  8. 策略设计模式与c语言中的函数指针

    在C语言中有一个非常重要的概念-函数指针,其最重要的功能是实现回调函数(指函数先在某处注册,而它将在稍后某个需要的时候被调用)在java语言中没有指针的概念,但是可以利用接口和指针实现类似的功能,具体 ...

  9. C语言复杂的函数指针声明

    复习C语言ING,发现复杂的函数指针声明看不懂,百度半天终于略知一二. 讲的比较详细的一篇blog: http://blog.csdn.net/megaboy/article/details/4827 ...

随机推荐

  1. 推荐一些常用感觉不错的jQuery插件

    转:http://www.cnblogs.com/v10258/p/3263939.html JQuery插件繁多,下面是个人在工作和学习中用到感觉不错的,特此记录. UI: jquery UI(官方 ...

  2. Java多线程系列--“JUC锁”09之 CountDownLatch原理和示例

    概要 前面对"独占锁"和"共享锁"有了个大致的了解:本章,我们对CountDownLatch进行学习.和ReadWriteLock.ReadLock一样,Cou ...

  3. 使用Guava提供的filter过滤集合

    正常情况下,我们声明一个List需要如下代码 List<String> list = new ArrayList<>(); list.add("AAA"); ...

  4. Android Fragment add/replace以及backstack

    无论Fragment以何种方式加入,都不会影响backstack,backstack由addToBackStack函数决定,只有调用了这个函数,才会将Fragment加入返回栈.这个说法其实不太准确, ...

  5. Nginx做前端Proxy时TIME_WAIT过多的问题

    我们的DSP系统目前基本非凌晨时段的QPS都在10W以上,我们使用Golang来处理这些HTTP请求,Web服务器的前端用Nginx来做负载均衡,通过Nginx的proxy_pass来与Golang交 ...

  6. NPOIExcelHelper

    using System.Data; using System.Configuration; using System.Web; using System.IO; using System.Text; ...

  7. IOS UIView 02- 深入理解 Scroll Views

    注:本人是翻译过来,并且加上本人的一点见解. 前言 可能你很难相信 UIScrollView 和一个标准的 UIView 差异并不大,scroll view 确实会多出一些方法,但这些方法只是和 UI ...

  8. javascript日常总结

    如何去除掉inline-block元素之间的默认间距 前几天写一个页面 1 2 3 4 div{width:900px;} div li{ display:inline-block; width:30 ...

  9. 60,000毫秒内对Linux的性能诊断效的方法

    转载于:http://www.itxuexiwang.com/a/liunxjishu/2016/0225/168.html?1456484140 60,000 毫秒内对 Linux 的性能诊断 当你 ...

  10. [Java面试三]JavaWeb基础知识总结.

    1.web服务器与HTTP协议 Web服务器 l WEB,在英语中web即表示网页的意思,它用于表示Internet主机上供外界访问的资源. l Internet上供外界访问的Web资源分为: • 静 ...