c++ 函数指针_C语言难点之C中的功能指针

在C语言中,就像普通的数据指针(int *,char *等)一样,我们可以具有指向函数的指针。以下是一个简单的示例,显示了使用函数指针进行的声明和函数调用。

ec74ce94d61a6da5af3a85e685fde8cd.png

77fc5a4d74578fa0fb71bbb5dfa25738.png

在上面的示例中,为什么在功能指针(例如fun_ptr)周围需要一个额外的括号?
如果删除括号,则表达式“ void(* fun_ptr)(int)”变为“ void * fun_ptr(int)”,这是一个返回空指针的函数的声明。

以下是有关函数指针的一些有趣的事实。

1.与普通指针不同,函数指针指向代码,而不是数据。通常,函数指针存储可执行代码的开头。

2.与普通指针不同,我们不使用函数指针分配取消分配内存。

3.函数名称也可以用来获取函数的地址。例如,在下面的程序中,我们在分配中删除了地址运算符'&'。我们还通过删除*更改了函数调用,该程序仍然有效。

cba0edb266b9ca150086bbd0dabc25ae.png

4.像普通指针一样,我们可以有一个函数指针数组。下面第5点的示例显示了指针数组的语法。

5.可以使用功能指针代替开关盒。例如,在下面的程序中,要求用户在0和2之间进行选择以执行不同的任务。

9a792c33d90dae9e09b8a8dcac693cfc.png

6.像普通数据指针一样,函数指针可以作为参数传递,也可以从函数返回。
例如,考虑下面的C程序,其中wrapper()接收一个void fun()作为参数并调用传递的函数。

1516700d9386046529943d5edb9e2e9b.png

这一点在C语言中特别有用。在C语言中,我们可以使用函数指针来避免代码冗余。例如,简单的qsort()函数可用于以升序或降序或在结构数组的情况下以任何其他顺序对数组进行排序。不仅如此,借助函数指针和void指针,还可以将qsort用于任何数据类型

56feee8ab21a8d1c24a9047f99fa23ac.png

与qsort()类似,我们可以编写自己的函数,这些函数可用于任何数据类型,并且可以执行不同的任务而无需代码冗余。以下是可用于任何数据类型的示例搜索功能。实际上,我们可以使用此搜索功能通过编写自定义的比较功能来查找接近的元素(低于阈值)。

421611c1ebe731efe451a91eecbe051d.png

通过编写单独的自定义compare(),以上搜索功能可用于任何数据类型。

7. C ++中许多面向对象的功能都是使用C中的函数指针实现的。例如虚函数。类方法是使用函数指针实现的另一个示例。

想领取免费资料以及教程,请查看下方图片:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值