指向函数的指针
- 计算机也会给函数分配存储空间, 既然函数会分配内存空间,
- 函数也有自己的地址, 所以指针变量也可以保存函数的地址
- 指向函数的指针的定义
void (*p)();
p = &test;
void test(){
printf("test\n");
}
- 如果一个指针指向了函数, 那么访问方式也有多种方式
- 函数名称();
- (*指针变量名称)();
- 指针变量名称();
test();
(*p)();
p();
指向函数的指针的案例
- 需求: 要求一个函数既可以计算两个变量的和, 也可以计算两个变量的差
- 指向函数的指针的一个应用场景
#include <stdio.h>
int sum(int num1, int num2);
int minus(int num1, int num2);
int test(int num1, int num2, int (*funP)(int, int));
int main()
{
// 需求: 要求一个函数既可以计算两个变量的和, 也可以计算两个变量的差
// 指向函数的指针的一个应用场景
int res1 = sum(10, 20);
printf("res1 = %i\n", res1);
int res2 = minus(10, 20);
printf("res2 = %i\n", res2);
/*
int (*funP)(int, int);
funP = ∑
int res3 = funP(10, 20);
printf("res3 = %i\n", res3);
funP = −
int res4 = funP(10, 20);
printf("res4 = %i\n", res4);
*/
int res3 = test(10, 20, sum);
printf("res3 = %i\n", res3);
int res4 = test(10, 20, minus);
printf("res4 = %i\n", res4);
return 0;
}
int test(int num1, int num2, int (*funP)(int, int)){
return funP(num1, num2);
}
int sum(int num1, int num2){
return num1 + num2;
}
int minus(int num1, int num2){
return num1 - num2;
}
-
图示如下
- 注意点:
- 指向函数的指针,作为函数的形参时, 指针变量的名称, 就是形参的名称
- 如果指向函数的指针作为函数的参数, 那么这个可以称之为回调函数
- 这里相当于, 给demo函数传入了一个sum函数或者minus函数
- 然后又在demo函数中调用了sum函数或者minus函数
网友评论