C语言指针(五)--函数指针

在第四篇关于链表的文章中读者可以通过实现单向链表了解简单的指针应用。但是,在这之中出现了函数指针和空指针。在这篇文章中将对这两方面的内容做讨论。
说实话我现在我快崩溃了,这是我第三遍写这篇文章,前两遍都是在我正要发布的时候莫名其妙的没有啦。所以。。。。。。先提三个问题
1.定义一个函数指针,返回值为int参数为空。
2.定义一个函数指针,返回值int参数为int。
3.定义一个返回int指针的函数参数为int。
4.定义一个返回函数指针的函数参数为空,返回的函数指针参数和返回值都是int。
对于C语言基础较好的读者,前两个问题应该不成问题,但是第三个问题就不是所有读者都可以搞定了。

1.int (*fun)(void);
2 int (*fun)(int);
3.int* fun(int prg)
{}
4.?

我们观察前两个问题的答案,可能会发现函数指针的定义其实就是在函数定义的基础之上把函数名用括号括起来然后在函数名前加一个星号。
所以第四个问题的答案可能是这样的

int (*fun)(int) function(void)
{}

可是我们观察第四个问题答案发现返回的指针并没有指针名所以应该把上面的定义改写成这样

int (*fun(void))(int)
{}

至于为什么是这样而不是这样

int (*fun(int))(void)
{}

其实这要用*号和()的优先级来解释,同时我参考了Linux中signal函数的定义原型。正因为这样的定义太让人费解,所以我强烈建议使用typedef。

typedef (int (*fun)(int)) newdef;
newdef fun(void)
{}

当然为了显示您的能力你也可以定义返回值和参数都是函数指针的函数。
下面来简单聊一下空指针,其实经常使用C语言的用户会发现空指针经常会出现在回调函数的参数列表中。这样做的好处是在实现回调函数时用户可以给回调函数传入任意参数以达到灵活实现功能的目的。例如:

void function(void* prg)
{
     int *p = (int *)prg;
     .......
}

灵活的定义空指针变量和将空指针作为函数参数,可以使自己的代码更加灵活。当然,不明确的类型也有其弊端。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

南波儿万

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

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

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

打赏作者

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

抵扣说明:

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

余额充值