定义函数地址:如果在程序中定义了一个函数,那么在编译的时候,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(也叫入口地址)称为这个函数的地址。

和数组一样,数组名代表地址,而函数名表示函数地址。

函数的调用:可以通过函数名直接调用,也可以通过函数指针间接调用。

函数指针定义:函数返回值类型 (*函数指针变量名)(参数列表);   如:int (*p)(int data);其中,参数名可以省略不写

函数指针调用:(*函数指针变量名)(实参)

#include<stdio.h>

//定义函数
void PrintData()
{
printf("Hello WOrld\n");
} int main()
{
void (*p)();//定义函数指针
p=PrintData;//让函数指针指向该函数
(*p)();//间接调用函数
PrintData();//直接调用函数
}

调用函数,打印两次:

Hello WOrld
Hello WOrld

通过函数指针来实现回调函数:

#include<stdio.h>

//定义函数

int GetMax(int a,int b)
{
return a>b?a:b;
}
int GetMin(int a,int b)
{
return a<b?a:b;
}
int GetAverage(int a,int b)
{
return (a+b)/2;
}
//回调函数
int DataHandler(int a,int b,int (*pfunc)(int a,int b))
{
int ret;
ret=(*pfunc)(a,b);//调用函数
return ret;
} int main()
{
int (*pfunc)(int a,int b);//定义函数指针
int m;
int ret;
printf("请输入m:\n");
scanf("%d",&m);
switch(m)
{
case 0:
pfunc=GetMax;
break;
case 1:
pfunc=GetMin;
break;
case 2:
pfunc=GetAverage;
break;
default:
exit(-1);//退出程序,后面的代码不执行
}
//调用回调函数
ret=DataHandler(10,20,pfunc);
printf("%d\n",ret);
return 0;
}

输出结果:

请输入m:
1
10
请输入m:
2
15

最新文章

  1. C/C++ Memory Layout
  2. sh5.while 脚本练习
  3. java反射学习之一反射机制概述
  4. Mysql 安装-windows X64
  5. centos7.2 默认启动内核修改
  6. CCommandManager 类
  7. 打包jar文件 外部调用资源 so等
  8. mysqldump命令
  9. 安卓/res/menu/的使用
  10. A sample of procedure in using
  11. HDU 2571 命运 动态规划
  12. S2SH邮件注册激活后注册成功
  13. ncsim仿真VHDL
  14. mybatis常用操作
  15. 关于ViewPager被嵌套在ScrollView中不显示的问题
  16. [LeetCode] Hand of Straights 一手顺子牌
  17. Django Cookie,Session
  18. python 模块会导入几次?猴子补丁为什么可以实现?
  19. English Phonetic Spelling Alphabet
  20. 初识C#程序结构

热门文章

  1. dotnet 设计规范 &#183; 抽象定义
  2. 一种比css_scoped和css_module更优雅的避免css命名冲突小妙招
  3. Java基础——01
  4. Toast 部分记录丢失问题处理
  5. 动态调整日志级别思路&amp;实现
  6. 凭借SpringBoot整合Neo4j,我理清了《雷神》中错综复杂的人物关系
  7. 微信小程序-云函数、云存储
  8. 第六章:Django 综合篇 - 19:部署 Django
  9. Typora如何配置gitee图床
  10. Kubernetes 中部署 MySQL 集群