c语言中函数指针的用法和技巧

原创 2013年12月05日 14:36:07

函数指针的用法

2.1基本概念int (*f)();

前一个括号迫使间接访问*f在函数被调用前进行。

程序中的每个函数都位于内存中的某个位置,所以存在指向那个位置的指针是完全可能的。

函数指针被声明后不指向任何值,在访问前必须把它初始化指向某个函数。

2.2 回调函数:查找函数与类型无关首先要做到改变比较的执行方式,使用函数指针可以解决类型的抽象化问题。调用者编写一个函数,用于比较两个值,然后把一个指向这个函数的指针作为参数传递给查找函数。然后查找函数调用这个函数来执行值的比较。然后要做到向函数传递的一个指向值的指针而不是值本身。函数有一个void*的形参用于接收这个参数。然后指向这个值的指针便传递给比较函数。这样可以比较不同类型的数据。

这就是回调函数,因为用户把一个函数作为参数传递给其他函数,后者将回调用户的函数。这里,在函数内部必须把void*强制转换为正确的类型。回调函数比较两个值。查找函数向比较函数传递两个指向需要进行比较的值的指针,并检查比较函数的返回值。这样,查找函数就与类型无关,因为它本身并不执行实际的比较。但是,调用者必须编写必须的比较函数。

大体结构为

#include <stdio.h>

 #include “node.h”

Node* Search_list(Node* node,void const *value,int(*compare)(void const*,void const*))

{

While(node!=NULL)

{

If(compare(&node->value,value)==0) break;

Node=node->link

}

Return node;

}

然后,在compare接口的约束下,实现比较整数的函数

Int compare_ints(void const* a,void const* b)

{If(*(int*)a==*(int*)b)  return 0;

Return 1;}

最后调用查找函数Desired_node=search_list(root,&desired_value,compare_ints)

 

2.3 讨论回调函数实现两个对象之间的通信。如果一个对象实时接受外界中断,状态处在不断的变化中,而其他对象依赖于该对象,需要根据该对象的变化来做出响应。如果直接用其他对象来调用该对象,则耦合太深,更改代码时不容易。因此采用回调函数的方法来通知其他对象该实时对象的状态发生了变化。即每个需要知道该状态的对象都注册一个该对象的回调函数。

用函数指针实现C语言的抽象接口编程:例如,如下为一个抽象的写操作,该写操作可以写local-L2,L2和DDR。

而写不同设备的方法是不同的,如果实现抽象化从而最大限度的复用代码呢?

首先设计一个写的抽象的接口函数Write,该接口函数读入一个id用来表示不同的存储器操作,在内部转发给不同的函数指针指向的对象。

1 int Write(int DevID, char* DataFrom, int StartDevAddr, int DataLong)

2 { return DevWrite[ DevID ]( char* DataFrom, int StartDevAddr, int DataLong );}

3 其中,DevWrite[ DevID ]就是一个函数指针数组:其定义为 int (*DevWrite)[ MAX_DEV_NUM ]( char*,int,int ) = {0};里面放的就是多个具体实现的操作

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C语言学习笔记(21) 函数指针、回调函数及复杂指针阅读技巧

摘要:总结了函数类型的本质,回调函数的思想,以及负责指针阅读技巧右左法则。 一、函数类型     1.C语言中的函数也有自己的类型,就像数组一样。     2.C语言中国的函数的类型由函...

C语言函数指针

  • 2012-10-07 13:19
  • 15KB
  • 下载

C语言函数指针

  • 2013-07-14 23:23
  • 25KB
  • 下载

C语言结构体指针,函数指针的用法

学习一下,保证自己的基础,边学边记录是个很好的习惯,以后回头来看看,就马上能了解了 第一个程序是:C语言结构体指针用法,包括malloc和free的用法 #include "stdaf...

C语言函数指针.doc

  • 2015-08-04 11:36
  • 35KB
  • 下载

c语言函数指针

  • 2015-10-10 09:15
  • 33KB
  • 下载

C语言函数指针基础

转自:http://blog.jobbole.com/44639/ 函数指针虽然在语法上让人有些迷惑,但不失为一种有趣而强大的工具。本文将从C语言函数指针的基础开始介绍,再结合一些简单的用法和关于函...

C语言结构体中定义函数指针详解

原创链接:http://blog.csdn.net/qq_21792169/article/details/50436089      在学习嵌入式我们经常和结构体函数指针打交道,还...

c语言 函数指针

彻底搞定C指针-函数名与函数指针(2005-10-14 23:35:00) 【收藏】 【评论】 【打印】 【关闭】  函数名与函数指针 一 通常的函数调用     一个通常的函数调...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)