通俗易懂的函数指针及函数指针数组

函数指针

指针我们知道实际上是一个变量或者数组等的地址。如我们定义:
void *Ptr;
该指针变量可以指向我们希望指向的地址,如我们有数组为a[2] = {0,1},那么我们可以通过给指针变量赋值,使其指向该数组Ptr = a;
函数指针实际上和这种指针类似,只不过其变量类型是一个函数类型而已。如果觉得搞不明白,可以把函数类型理解为和int一样的数据类型。
如我们可以这样定义一个函数
void DataTrans(int Data, int Len)
那么同样我们可以这样定义一个函数指针
void (*DataTransPtr)(int Data,int Len)
对比函数的定义和函数指针的定义可以发现,不同的是函数指针需要在函数名前加上 * 以代表该变量是个指针变量,其余的和函数的定义一样。所以这样的话我们就可以通过赋值将函数的地址赋给函数指针,使函数指针指向该函数。
DataTransPtr = DataTrans;或者DataTransPtr = &DataTrans;两者等价。

指针变量定义时需要加 星号,使用时不需要加。使用时如果加的话便是取该地址上的值了。
函数指针数组

从上面可以看出给函数指针赋值时我们用了两种方式,其实C语言中的函数名本身代表的就是该函数的首地址。因此对于函数指针数组而言,直接使用函数名即可。
首先定义3个函数为
void FA(int a, int b); void FB(int a, int b); void FC(int a, int b);
然后定义一个同类型的函数指针
void (*FPtr)(int a, int b);
然后定义一个数组
void array[3];
对于以上的三种定义可以类比为变量的定义,类比如下
我们定义了3个变量分别为
int F1; int F2; int F3;
然后定义了一个同类型的指针变量
int F1;
然后定义了一个数组
int array_int[3];
当然我们可以把三个变量的值赋给数组array_int[0] = F1;想要赋值的话需要保证F1array_int的类型相同,例子中他们都是int型,所以可以赋值。
那么对于函数指针数组来说,如果要给函数指针数组赋值,也同样需要保证类型一致。
首先我们需要把函数指针重新做一下定义
typedef void( FPtr)(int a, int b);
这样是重新定义了一个新类型,也就是函数指针类型,可类比int
然后对数组定义
FPtr array[3];
这样数组的类型就是函数指针类型,可以通过对数组赋值完成函数的调用,如
FPtr array[] = {
FA;
FB;
FC; }

当我们需要调用函数FA时,可直接使用array[0](a, b)来调用。

v v v v v v

本文为作者原创,请勿转载,转载请联系作者。
点击下方卡片,关注我的公众号,有最新的文章和项目动态。

v v v v v v

  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

董董灿是个攻城狮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值