今天在学习数据结构中遇到一些问题,函数的指针不知道怎么用,给自己科普一哈
 1 int LocateElem_Sq(SqList L, LElemType_Sq e, Status(*Compare)(LElemType_Sq, LElemType_Sq))
2 {
3 int i = 1; //i的初值为第一个元素的位序
4 int * p = L.elem; //p的初值为第一个元素的存储位置
5 while(i<=L.length && !(*Compare)(*p++,e))
6 ++i;
7 // 也可以写作 while(i<=L.length && !Compare(e, L.elem[i-1]))
8 // ++i;
9
10 if(i<=L.length)
11 return i;
12 else
13 return 0;
14 }
 

/*

Status(*compare)(ElemType,ElemType))形参是不是指向函数的指针

Status(*compare)(ElemType,ElemType)) 定义的是一个函数指针

Status compare(ElemType c1,ElemType c2)是一个真实的函数

*/

简单谈谈我对函数指针的理解

假设我现在定义一下指针和函数

 int f(int);//函数f有两个形参,返回值为整型
int (*pf)(int);//指向函数的指针

对于pf的赋值可以有以下两种方式

 )pf = &f
)pf = f//常用方式

对于1)初始化表达式中的&操作符是可选的。因为函数名使用时总是由编译器把它转换为函数指针。&操作符只是显示地说明了编译器将隐式执行的任务。

可以使用以下方式调用函数

 int ans;
)ans = f();//假设给函数传递的参数是24
)ans = (*pf)();//严蔚敏那版数据结构中的代码采用这种方法,还有大部分国内的c语言教材也是采用这种写法
)ans = pf();//《c和指针》这本书中通用的写法,我认为这种写法好理解一些

1)使用函数名字调用函数,函数名字f首先被转换为一个函数的指针,该指针指定函数在内存中的位置,然后函数调用操作符调用该函数,执行开始于这个地址的代码

2)对于of执行间接访问操作,它把函数指针转换为一个函数名,然后执行与1)相同的操作

3)因为pf是函数的地址,这里就省略了转换过程。

例子:

 int (*p)(int);

我们知道 (*p)(int) 是个整数,所以, *p 是个 返回整数的函数。而p就是指向这种函数的指针

 int (**p)(int);

(**p)(int)是个整数。 **p 是个函数,返回一个整数。于是 *p 是个函数的指针。 p 是个函数指针的指针。

函数指针的理解 from 数据结构的更多相关文章

  1. c语言函数指针的理解与使用

    1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: A) char * (*fun1)(char * p1,char * p2); B) char * *fun ...

  2. 函数指针-如何理解typedef void (*pfun)(void)

    问题: 在刚接触typedef void (*pfun)(void) 这个结构的时候,存在疑惑,为什么typedef后只有一"块"东西,而不是两"块"东西呢?那 ...

  3. 转·c语言函数指针的理解与使用

    原文出处:https://www.cnblogs.com/haore147/p/3647262.html 1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: 1 ...

  4. c语言函数指针的理解与使用(学习)

    1.函数指针的定义 顾名思义,函数指针就是函数的指针.它是一个指针,指向一个函数.看例子: 1 2 3 A) char * (*fun1)(char * p1,char * p2); B) char  ...

  5. C语言关于指针函数与函数指针个人理解

    1,函数指针 顾名思义,即指向函数的指针,功能与其他指针相同,该指针变量保存的是所指向函数的地址. 假如是void类型函数指针定义方式可以是 void (*f)(参数列表);亦可以先用 typedef ...

  6. 关于C/C++函数指针声明的理解

    [前言] 由于最近对函数指针的理解比较模糊,所有又重新学习了一把关于函数指针的知识,参考了很多书籍和网上的文章.现在本人进行一下分享和总结.本文的其实只是整理和总结别人现有的文章,作为备用参考文档. ...

  7. c语言指针函数与函数指针

    例一:指针函数 指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某一类型的指针 类型标识符    *函数名(参数表) int *f(x,y); 首先它是一个函数,只不过这个函数的返回值是一个 ...

  8. C语言--指针函数和函数指针

    指针函数和函数指针 指针函数其实是一个简称,是指带指针的函数,它本质上是一个函数,只是返回的是某种类型的指针.其定义的格式为: 类型标识符 *函数名(参数表)  函数指针,从本质上说是一个指针,只是它 ...

  9. 谈谈自己对C语言中函数指针的一些理解 (第一次写博客,有点小兴奋哈)

    1.函数指针声明的格式及简单的使用 (1)格式:(返回值)(*函数指针名)(参数列表)    例如:声明一个无参数无返回值的函数指针(void)(*p)(void). (2)将函数指针指向某个无参数无 ...

随机推荐

  1. linux-umount挂载点无法卸载:device is busy(解决)

    umount不了的原因一般是由于有程序有用户在占用 解决方法: 1.      首先查找谁在占用:#fuser /mnt/nfs 得到进程号. 2.      查找进程:#ps –ef|grep 进程 ...

  2. C++ Primer 笔记——嵌套类 局部类

    1.嵌套类是一个独立的类,与外层类基本没什么关系.特别的是,外层类的对象和嵌套类的对象是相互独立的.在嵌套类的对象中不包含任何外层类定义的成员,在外层类的对象中也不包含任何嵌套类定义的成员. 2.嵌套 ...

  3. Redis都有哪些数据类型

    string 这是最基本的类型了,就是普通的set和get,做简单的kv缓存 hash 这个是类似map的一种结构,这个一般就是可以将结构化的数据,比如一个对象(前提是这个对象没嵌套其他的对象)给缓存 ...

  4. python从零安装

    一 python 1.安装python https://www.python.org/ 环境变量path添加 ;C:\Python27;C:\Python27\Lib\site-packages;C: ...

  5. Spring Security 架构与源码分析

    Spring Security 主要实现了Authentication(认证,解决who are you? ) 和 Access Control(访问控制,也就是what are you allowe ...

  6. 【转】ArcGIS10的附件功能

    转自:http://blog.csdn.net/linghe301/article/details/6386176 老是忘记怎么使用这个ArcGIS10的附件功能,这次就做个记录吧. 在项目应用过程中 ...

  7. Zabbix微信报警触发

    (1)         企业应用-创建应用 1.除了对个人添加微信报警之外,还可以添加不同管理组,接受同一个应用推送的消息, 成员账号,组织部门ID,应用Agent ID,CorpID和Secret, ...

  8. 移动端line-height问题

    ios5  上:82px;下:84px; ios6  上:82px;下:84px; ios6 plus 上:124px;下:126px; mi4w 上:118px;下:130px; vivo  上:5 ...

  9. BZOJ4003 [JLOI2015]城池攻占 左偏树 可并堆

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ4003 题意概括 题意有点复杂,直接放原题了. 小铭铭最近获得了一副新的桌游,游戏中需要用 m 个骑 ...

  10. unicode utf-8 ascll编码比较

    1.字符编码     因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte), 所以,一个字节能表示的最大的整数就 ...