嵌入式-C语言基础:函数指针
2024-09-05 17:56:16
定义函数地址:如果在程序中定义了一个函数,那么在编译的时候,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(也叫入口地址)称为这个函数的地址。
和数组一样,数组名代表地址,而函数名表示函数地址。
函数的调用:可以通过函数名直接调用,也可以通过函数指针间接调用。
函数指针定义:函数返回值类型 (*函数指针变量名)(参数列表); 如: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
最新文章
- C/C++ Memory Layout
- sh5.while 脚本练习
- java反射学习之一反射机制概述
- Mysql 安装-windows X64
- centos7.2 默认启动内核修改
- CCommandManager 类
- 打包jar文件 外部调用资源 so等
- mysqldump命令
- 安卓/res/menu/的使用
- A sample of procedure in using
- HDU 2571 命运 动态规划
- S2SH邮件注册激活后注册成功
- ncsim仿真VHDL
- mybatis常用操作
- 关于ViewPager被嵌套在ScrollView中不显示的问题
- [LeetCode] Hand of Straights 一手顺子牌
- Django Cookie,Session
- python 模块会导入几次?猴子补丁为什么可以实现?
- English Phonetic Spelling Alphabet
- 初识C#程序结构