函数指针 函数指针数组 转移表 指向函数指针数组的指针

函数指针
如果在程序中定义了一个函数,在编译时,编译系统为函数代码分配一段存储空间,这段存储空间的起始地址(又称入口地址)称为这个函数的指针 eg:
int (p)(int,int) 定义p是一个指向函数的指针变量,它可以指向函数的类型为整形且有俩个整型参数的函数。p的类型用int()(int,int)表示
函数指针最常用的俩个用途是
1)转换表
2)作为参数传递另一个函数

注意:简单的声明一个函数指针并不意味着它马上可以使用。和其他指针一样,对函数指针执行间接访问之前必须把它初始化为指向某个函数。举个例子:
int f(int);
int (*pf)(int) = &f;

在函数指针被声明且初始化后,我们就可以用以下三种方式调用函数:
int a;
a=f(25);
a=(*pf)(25);
a=pf(25);

注意:对指向函数的指针变量不能进行算数运算 ,如p+n,p++,p–
函数指针数组
数组是一个存放相同类型数据的存储空间,把函数的地址存到一个数组中,那这个数组就叫函数指针数组。
int arr[10]; //数组的每个元素是int 此为指针数组
int (*parr1[10])( ); //函数指针数组
parr1 先和 [] 结合,说明parr1是数组 且其基类型为整型

转移表
int sub(int a, int b){
return a - b;
}
int add(int a, int b){
return a + b;
}
int mul(int a, int b){
return a * b;
}
int Div(int a, int b){
if (b!=0)
return a / b;
}
//转移表
int main12(){
int(*p[])(int, int) = { add, sub, mul, Div }; //函数指针数组
int len = sizeof§ / sizeof(p[0]);
for (int i = 0; i < len; i++){
printf("%d\n\a", p[i](6, 2));
}
system(“pause”);
return 0;
}

指向函数指针数组的指针
type (*(*p)[4])()
(*p)[4] 指针数组
(*p)( ) 函数指针
结合起来就是函数指针数组的指针

void test(const char* str) {
printf("%s\n", str);
}
int main() {
//函数指针pfun
void (pfun)(const char) = test;
//函数指针的数组pfunArr
void(pfunArr[5])(const char str);
pfunArr[0] = test;
//指向函数指针数组pfunArr的指针ppfunArr
void (*(ppfunArr)[10])(const char) = &pfunArr;
system(“pause”);
return 0;
}

回调函数
回调函数就是一个通过函数指针调用的函数。如果你把函数的指针(地址)作为参数传递给另一个函数,当这 个指针被用来调用其所指向的函数时,我们就说这是回调函数。回调函数不是由该函数的实现方直接调用,而 是在特定的事件或条件发生时由另外的一方调用的,用于对该事件或条件进行响应。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值