×

函数指针的作用 函数指针 c语言函数指针

求解释c语言函数指针的作用?指针究竟有什么用

admin admin 发表于2022-07-12 05:34:04 浏览75 评论0

抢沙发发表评论

求解释c语言函数指针的作用


上面的话是有道理的。只是,要真的体会这些名词,需要你亲历躬行,一个“百度知道”是很难让你真正体会并理解的。国人一些教科书也不负责任,人云亦云的说这些话,但很少能透彻讲解。我小试一下。
1. 便于分层设计:函数指针是引用,是间接层,或曰隔离层。它输出到上层,给上层用户用。函数实体是实现,在下层,给开发者用,实现者(软件工程师)关注。这就是简单的分层的概念了。上层用户想让一个函数所做的东西会变化时,我们只需要改变底层实现,并用函数指针指向新的实现就行了。
再精炼一下分层:分层的核心是对接口进行设计和实现。函数指针的作用就是提供不同实现的统一接口。
2. 利于系统抽象:只有存在多个类似的实体需要模拟、操作或控制时(这种情况很多)才需要抽象。多个类似的实体就是对象,抽象的结果就是类。在C里边,可以用函数指针数组完成这种抽象。如, fopen 就是一个例子。他可以打开文件。C里面将磁盘文件、串口、USB等诸多设备抽象为文件。
3. 降低耦合度以及使接口与实现分开:第1条中的解释已经说明了这一点。
再具体一下:
我曾搭建过一个嵌入式平台。其中的设备操作(硬件驱动)采用了多组函数指针数据,并进行了简单的封装,其结果是:
业务软件使用函数指针数组的封装函数访问设备。这个封装可展示为:
int DevOpen(char *strDevName);
int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong);
int Read(int DevID, char* DataTo, int StartDevAddr, int DataLong);
int DevClose(int DevID);
这组抽象出来的函数,是一组语义清晰且稳定的上层接口,为上层的业务开发团队使用。底层的驱动层,各自实现自己的设备打开、读、写及关闭代码,然后,注册自己的设备到系统列表里。上层业务接可以使用了。期间的耦合在这里:
int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong)
{
/* Error detecting. */
return DevWrite( char* DataFrom, int StartDevAddr, int DataLong );
}
其中,DevWrite就是一个函数指针数组:
int (*DevWrite)( char*,int,int ) = {0};
里面放的就是多个设备的写的操作。其中包括:UART,RTC,WatchDog。EEPROM,DigitalInput,DigitalOutput,Key,LCD,LED。
好了。说的太多了。如需要学习,可邮件livefuture@163.com。
但愿对你有所帮助。

指针究竟有什么用

不想说更多关于其他单词的信息,您不明白您是否说太多,哪种语言不重要,只有在经验在一定程度上积累的情况下,您才会有经验。任何技术的存在都有其历史起源。

1.大数据传输,只要传输地址传输,它等同于传递n个多个数据,快速速度

2.传输功能地址,实现回调,事件调用(这对于设计模式非常有用)

建议使用回调功能来了解Windows的消息机制。回调函数是多任务处理的基础,细节将不会扩展。函数地址的传输是一项非常有用的技术,可以实现许多灵活的操作。没有某些工作经验,就无法体验。

举个极其简单例子吧,有一个int的数组,要遍历所有元素查找最大值,要写一个循环,循环中编写比较大小的代码,比如 if (a》b){max=a.....},最后返回最大值,这个没有问题。现在我要增加一种算法,求最小值,那么你必须另外写个函数,同样的循环体,不同的地方就是循环内的代码不同,要改成 if (a《b){min=a.....},诸如此类的算法很多,当你的业务中有大量的循环处理时,你会发现需要编写N多的函数,其中除了函数名称和循环体内算法不一样外,函数构成几乎一模一样. 另一方面,如果我要遍历的不是int类型数组呢?那岂不要写N多的重载函数?-函数指针的作用

对于这种情况,Touevant(LAN)程序员绝对是无法接受的。

如何缩减代码量,可不可以将不同的核心处理代码单独打包定义,而我只要编写一个包含循环体的遍历函数就可以了呢?而我只需要定义打包各类不同的算法,当我需要时把其中算法代码的地址传递给循环函数,不就可以了吗?更进一步,如果函数或者核心处理代码能够接受和设别不同类型元素的数组,那岂不是非常完美了?-函数指针

因此,可以出现功能地址的需求。实际上,调节功能的功能,事件响应是该机制。函数指针的重要性是,当无法在编译之前确定处理方法或如何处理数据的决策权不在周期中时,您需要event回调功能或事件触发机制,以及这些基础的基础机制是功能指针。-函数指针的作用

因此,指针的重要性不像变量那么简单。它的影响很大。从我的知识中,它是实现多态性和工厂模型的建立的基础。

PS:不要认为VB C#没有指针。如果没有VB,则无法实现恢复响应。不要认为操作内存是没有用的,也就是说,您不需要使用它。

顺便说一句,代码剪辑,我的日常工作需要数据表VBA遍历的遍历的圆形部分,并使用事件触发器和处理单元的机理。

再次添加C#的委员会。实际上,指针也使用了委托,但是C#被隐藏了,名称已更改:本质是相同的.c#呼叫的需求,so称为so的通用类是变量或函数接口可以存储不同的数据类型,而不是像int这样的基本类型只能存储整数类型。然后,然后-函数指针

例如,列表类型,它是一个通用数组类,它包含许多方法/函数。找到的方法是上面提到的需求。查找仅提供回收利用。提供n多个重载功能,这增加了代码量,灵活性降低。因为查找的工作是要找到的,所以参数很简单。需要匹配函数返回布尔值以指示循环是否结束。-函数指针的作用

查找的参数是函数佣金/指针。内部有一个周期,发现遍历索引0的所有元素。获得该元素后,将调用Proc。PROC是程序员提供的匹配代码。请注意,列表的元素可以是任何对象实例。

C#实现了许多程序员的需求,而VB只能因为早期语言而编写Traverser,但是只要您了解这些需求或想法,就可以实现相同的功能。

学习编程最重要的是学习思想而不是代码。语言和代码确实并不重要。它们只是用于实现您的想法的工具。代码中有很多单词,但是您只想解释。存在只是因为语言更新封装在变形中。它更方便。在此示例中,Proc是指针和功能指针。在C#中,语句是一个语句指针,但呼叫或代码表格不同。-函数指针

函数指针有什么作用在编程时我为什么很少能感觉到它的强大啊


呵呵,MFC的消息映射机制,最终是通过用C++模拟委托(delegate)实现的,这个委托就是非常特殊的函数指针。
不光MFC,大型C++系统中很多机制,特别是事件机制,都要借助函数指针实现的。