1、什么是函数指针?
如果程序定于了一个函数,那么在编译时系统会为这个函数代码分配一段存储空间,这段存储空间的首地址称为这个函数的地址。函数名表示的就是这个地址。
2、如何定义函数指针变量?
//函数返回值类型(*指针变量名)(函数参数列表);int(*p)(int,int);
第一个int表示的是返回值,后两个int表示这个指针变量可以指向两个int参数
函数指针无法++或者—。
3、如何使用函数指针
# include <stdio.h>int Max(int, int); //函数声明int main(void){int(*p)(int, int); //定义一个函数指针int a, b, c;p = Max; //把函数Max赋给指针变量p, 使p指向Max函数printf("please enter a and b:");scanf("%d%d", &a, &b);c = (*p)(a, b); //通过函数指针调用Max函数printf("a = %d\nb = %d\nmax = %d\n", a, b, c);return 0;}int Max(int x, int y) //定义Max函数{int z;if (x > y){z = x;}else{z = y;}return z;}
4、回调函数
无参回调函数
#include<stdio.h>int Callback_1() // Callback Function 1{printf("Hello, this is Callback_1 ");return 0;}int Callback_2() // Callback Function 2{printf("Hello, this is Callback_2 ");return 0;}int Callback_3() // Callback Function 3{printf("Hello, this is Callback_3 ");return 0;}int Handle(int (*Callback)()){printf("Entering Handle Function. ");Callback();printf("Leaving Handle Function. ");}int main(){printf("Entering Main Function. ");Handle(Callback_1);Handle(Callback_2);Handle(Callback_3);printf("Leaving Main Function. ");return 0;}
含参回调函数
#include<stdio.h>int Callback_1(int x) // Callback Function 1{printf("Hello, this is Callback_1: x = %d ", x);return 0;}int Callback_2(int x) // Callback Function 2{printf("Hello, this is Callback_2: x = %d ", x);return 0;}int Callback_3(int x) // Callback Function 3{printf("Hello, this is Callback_3: x = %d ", x);return 0;}int Handle(int y, int (*Callback)(int)){printf("Entering Handle Function. ");Callback(y);printf("Leaving Handle Function. ");}int main(){int a = 2;int b = 4;int c = 6;printf("Entering Main Function. ");Handle(a, Callback_1);Handle(b, Callback_2);Handle(c, Callback_3);printf("Leaving Main Function. ");return 0;}
