今天在学习数据结构中遇到一些问题,函数的指针不知道怎么用,给自己科普一哈
 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. Python内置模块之序列化模块

    序列化模块 json dumps loads dump load pickle dumps loads dump load shelve json 1: dumps/loads import json ...

  2. 饮冰三年-人工智能-Python-11之HelloWorld

    1:安装不在介绍,下载软件下一步即可,配置环境变量(Python37会默认配置环境变量的) D:\Programs\Python\Python37\Scripts\;D:\Programs\Pytho ...

  3. IDEA中每次拷贝一个项目的时候必须标记一下配置文件resources,否则报错

  4. 字典树HihoCoder - 1014

    输入的第一行为一个正整数n,表示词典的大小,其后n行,每一行一个单词(不保证是英文单词,也有可能是火星文单词哦),单词由不超过10个的小写英文字母组成,可能存在相同的单词,此时应将其视作不同的单词.接 ...

  5. 字定义JSON序列化支持datetime格式序列化

    字定义JSON序列化支持datetime格式序列化 由于json.dumps无法处理datetime日期,所以可以通过自定义处理器来做扩展,如: import json from datetime i ...

  6. Visual Studio上编译ncnn

    prerequisite 是为了在PC上熟悉ncnn的基本代码,所以用Visual Studio来配置的. 期间用过VS2013(update5)/VS2015/VS2017,反正都是基于CMake生 ...

  7. python--使用队列结构来模拟共享打印机等候时间

    按书里的样例抄的. 可以看到,将打印速度由第分钟5页提高到10页之后, 每个学生提交打印任务到打印完成的时间明显缩短. =========================== 在计算机科学实验室里考虑 ...

  8. gradle构建时跳过指定tests

    https://blog.csdn.net/u012672646/article/details/58598532

  9. [转] 设置div的overflow:scroll,但是在手机上滑动的时候有点卡顿

    设置div的overflow:scroll,但是在手机上滑动的时候有点卡顿,所以在这个div上加一个css: -webkit-overflow-scrolling : touch; 在苹果手机上使用- ...

  10. .net core支持的操作系统版本

    https://github.com/dotnet/core/blob/master/os-lifecycle-policy.md