当前位置:首页 > 嵌入式培训 > 嵌入式学习 > 讲师博文 > 函数与指针专题

函数与指针专题 时间:2014-10-16      来源:未知

数组指针专题中给大家讲解了数组与指针相结合的各种表现形式,那么在来看看函数与指针结合会有什么样的意想不到的情况呢?

我们在学习函数之前必须知道一点,那就是函数名代表了函数的入口地址。想想我们前面的对数据的各种操作,知道了地址是不是就可以去访问它了啊。

一、总体框架图:

二、函数与指针

2.1函数

执行结果:

上面是咱们自己封装的一个函数,它的功能很简单,就是比较两个数的大小,并且返回大值。还有一点是需要注意的,函数里面的定义的变量都是保存在栈上,函数调用完毕,栈空间被释放(可以简单这么认为)。

但是存放变量的数据的那个单元格其实还在那里,只是我们不知道那个单元格的地址而已,所以我们就不能够访问,此时那个单元格的数据就称为脏数据。只到你下次cpu还为你分配这个段元格,你为其重新赋值,那么才会被改变。所以我们定义变量的时候应该为其进行初始化。

2.2 指针函数

指针函数,还是依照我们我们的小学的语文知识来分析它,定语是函数,修饰词是指针。直白的说指针函数的本质是一个函数,是函数就有返回值,它的返回值和别人稍微有点不一样是一个指针。我们这么分析之后,那么它的原型也就呼之欲出了。

执行结果:

其实,我这个程序我们有不规范的地方,我们一般都不这么用的,因为咱们的变量时在ret,空间被分配在了栈上,那么栈的空间是有限的,系统还会复用。所以不建议这么写。我这么写是对我上一个例子的验证。

执行结果:

p指针变量本身是在栈区分配空间的,malloc 分配的空间是在堆区的。

2.3函数指针

函数指针我们这么来解释它,本质是一个指针,前面的修饰语是函数,也就是这个指针比较特别,它指向的不是一个整数或者是char型的数据,而是一个函数,你仔细的想想,其实也是一件很普通的事情。知道了意思,那么还有一个问题我们是要解决的,那就是函数怎么来申明函数指针的类型呢。这里和数组指针的申明方法是一样的,对函数名加上括号加*号就ok。

执行结果:

2.4 函数指针函数

函数指针函数,本质是一个函数,返回值是一个函数指针。依据这样一个定义我们来列举这样一个例子。因为返回值是一个函数指针的情况并不多,我们就不进行详细分析了,感兴趣的同学,可以按照我上面的思路,自己分析一下。

2.5 函数指针数组

执行结果:

分析:

函数指针数组,本质是一个数组,数组中的每个元素,是一个函数指针。每个函数指针指向一个函数。那么函数指针数组。咱们指针难道了函数名,也就是函数的地址。调用它,就是把类型去掉即可

2.6 回调函数

回调函数是什么呢?大家想一想我们在哪些地方遇到它了呢?数据库的callback函数,还有哪里?线程的创建函数。那么现在我们来写一个自己的回调函数。重点弄明白原理。

执行结果:

回调函数,本质是要在一个函数中调用另外一个函数。那么我们很容易想到的是,需要得到这个函数的入口地址,我们只需要传参的时候,传递函数名即可。这样就可以实现回调了,但是还是不够灵活,还需要我们给这个被调用的函数的传参啊,于是第2个参数,第3个参数紧接着就出现了。

上一篇:基于FS4412内核移植之USB驱动的移植

下一篇:Wifi加密工具移植(FS_4412)

热点文章推荐
华清学员就业榜单
高薪学员经验分享
热点新闻推荐
前台专线:010-82525158 企业培训洽谈专线:010-82525379 院校合作洽谈专线:010-82525379 Copyright © 2004-2022 北京华清远见科技集团有限公司 版权所有 ,京ICP备16055225号-5京公海网安备11010802025203号

回到顶部