嵌入式-C语言基础:函数指针
定义函数地址:如果在程序中定义了一个函数,那么在编译的时候,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(也叫入口地址)称为这个函数的地址。
和数组一样,数组名代表地址,而函数名表示函数地址。
函数的调用:可以通过函数名直接调用,也可以通过函数指针间接调用。
函数指针定义:函数返回值类型 (*函数指针变量名)(参数列表); 如: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
4556