C语言:函数指针、函数指针数组、函数指针数组的指针

一.函数指针

1.定义理解
  • 函数指针:是一个指针,存放函数地址的指针。
  • 函数的地址可以通过取地址函数名拿到,也可以通过函数名直接拿到。
2.函数指针

(1)定义一个函数test

void test(char *str)
{
    printf("%s\n",str);
}
int main()
{
    //函数指针的定义方式
    void (*p)(char *str) = test;
    return 0;
}

(2)函数指针的使用

//调用函数test,传参:zhangsan
(*p)("zhangshan");

这里的*没有起作用,它是让我们知道这是一个指针然后解引用了一下。所以可以简化一下:(下面的写法也正确)

p("zhangsan");

(3)一些函数指针举例

//add函数
int (*p)(int x,int y)=add;
//调用
p(2,3);
//sub函数
int (*p)(int x,int y)=sub;
//调用
p(2,3);

这些函数指针类型都相同,因此我们考虑能不能把这些函数指针放到一个数组中呢?接下来我们引入一个函数指针数组。

二.函数指针数组

1.定义理解
  • 存放相同类型函数指针的数组。
2.函数指针数组

①定义一个函数指针数组

int (*p[4])(int,int)={add,sub,mul,div};

该函数指针数组包含四个函数指针,分别指向add函数,sub函数,mul函数,div函数,每一个函数的参数都是两个int型的参数。

②调用函数

//调用add函数
P[1](8,4);--->输出12
//调用sub函数
P[2](8,4);--->输出4
//调用mul函数
P[3](8,4);--->输出32
//调用div函数
P[4](8,4);--->输出2

三.指向函数指针数组的指针

1.定义理解
  • 针对刚刚上面存放了add,sub,mul,div四个函数的地址的指针数组p,既然p是一个数组,那么我们可以对p进行取地址,取出来的是数组的地址,要将这个地址存放起来我们需要一个指针,我们称作指向函数指针数组的指针。
2.函数指针数组的指针

那么函数指针数组的指针该如何书写呢?
我们还是以上面的函数指针数组p为例。

int (*(*pp)[4])(int x,int y)=&p;
//这里的pp就是存放了函数指针数组p的指针
小总结

到这里为止大家可能对这些比较绕,我们来总结一下。
①函数指针

int (*p)(int , int);

(这是一个指针,指向一个函数)
②函数指针数组

int (*p[4])(int ,int);

(这是一个数组,数组有四个元素,每个元素是一个指向函数的指针)
③指向函数指针数组的指针

int (*(*p)[4])(int ,int);

(这是一个指针,指向一个数组,这个数组有四个元素,每个元素是一个指向函数的指针)

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值