3、函数指针和指针函数

函数指针和指针函数

函数指针

函数指针是一个指针,指向一个函数,这个被指向的函数的返回值和参数列表必须和 指针定义时的返回值和参数列表相同。

例如下面的代码:

 #include<stdio.h>
 
 void pp()
 {
         printf("this is function pp!\n");
 }
 void ppp()
 {
         printf("this is function ppp!\n");
 }
 int main(void)
 {
         void (*p)();
         p = pp;
         p();
         p = ppp;
         p();
         return 0;
 }

就定义了一个指向 返回值为void,参数列表为空的函数指针,并且定义了两个函数pp和ppp,然后分别将p指向这两个函数并且调用函数。这就是函数指针。*p周围的括号一定不能省略,否则会错。使用()之后p先与*结合,所以p是一个指针。

注意在上面赋值的时候是直接把函数名赋值给指针,我们都知道指针指向的是地址,而前面指向变量的指针需要在变量前面加一个&这个取地址的符号,而函数指针指向函数的时候不需要,这说明其实函数名就是一个地址,

printf("%p\n",pp);
printf("%p\n",&pp);

我们可以再试试打印上面的两个值,一个是打印pp的值,一个是打印pp的地址,我们可以发现这两个值都是一样的,也就是说无论是pp还是&pp都是代表地址,所以前面指针的赋值不仅可以是p = pp;也可以是p = &pp;当然我们一般都是使用p = pp;少一个符号岂不方便?

指针函数

而指针函数则是一个函数,这个函数的返回值是一个指针。

例如int* f(int a, int b);就是一个指针函数的定义,这个函数的返回值必须是一个int型的指针。

()的优先级高于*,所以f先与()结合,f是一个函数。

函数指针数组

顾名思义,这是一个数组,数组中的每一个元素都是一个函数指针,而函数指针是一个指向函数的指针。数组中所有元素的类型必须相同,所以数组中所有的函数指针都必须指向同类型的函数。

int (*p[10])(int a, int b);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Little BigUs

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

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

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

打赏作者

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

抵扣说明:

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

余额充值