171029—函数自学【函数地址和函数指针】

前言:本篇多数说法来自个人理解。在理论、逻辑上

学到现在,发现了函数一个和之前接触的变量相比最大的不同之处:函数的调用只要提供函数的入口地址。
复习一下:

int a;int & b=a
cout<<a;变量名访问
cout<<b;引用名访问
cout<<&a;取变量地址
cout<<*(&a);间址访问

再看:

int func()
 func()
 &func//取函数地址,但函数只要你提供地址它就可以被访问。所以这样的形式也可以调用函数。

二.函数类型: 一类相同函数的抽象
注意:函数类型,取决于包括但不仅限函数返回值的类型。一个函数的类型要看它的参数种类及个数以及其返回值的种类。
基于此,联系变量(常量)有各种不同的类型。函数也可以有,而且可以人为定义:

typedef 类型 函数类型名(形式参数表)        typedef int functionkind(int,int,char)

这样的操作定义了一个类型的函数,其函数类型名为:functionkind。这个类型名是一类具有相同接口的函数的抽象。在此之后

functionkind main,maxmin; 
和
int a,b,c;

上述两行代码对比来看,第一行即是先定义了函数类型,而后只需以此形式声明,即可声明这三个函数
(注意,只是完成了三个函数的声明而已,没有进行定义,因为。。你家的函数体写了??)
到此,既然函数有了类型,那么指向函数的指针当然也有类型之别:

类型(*指针变量名)(形参表);
或
函数类型*指针变量名;

或者我们可以直接把定义函数类型和相应指针的工作一并完成:
使用关键字typedef

typedef 类型(*指针类型)(形参表);

而在定义完指针类型之后,将函数地址赋给指针,就可以调用函数。

有函数func;
有指针p;
p=func//即给指针赋值(函数地址值)
x=p(3.14//此步即等价于x=func(3.14)

可以通过函数调用的原理来理解这件事:
在Cpp中,上述的几种形式都是函数的代码模块在内存的入口地址值,称为函数地址。于此,我们只要提供了函数的地址,就可以调用函数。
函数这种代码对象和普通数据对象性质不同
所以调用函数的语句: 函数地址(实际参数表)即可完成

当参数是函数时:

套用数学概念即需要一个符合函数时。即此函数在定义时就需要另外一个函数作为参数时。我们可以通过指针来完成做参数的这个函数的调用。

P.S.
今日函数开始授课。仍有收获:
指针即地址,地址即指针。指针变量是存放指针的东西。
对指针变量赋值即改变指针指向。
对指针变量赋0即让其悬空。 P=0;
.main函数是所有函数的入口函数。

阅读更多
个人分类: C++总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

171029—函数自学【函数地址和函数指针】

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭