前言:本篇多数说法来自个人理解。在理论、逻辑上
学到现在,发现了函数一个和之前接触的变量相比最大的不同之处:函数的调用只要提供函数的入口地址。
复习一下:
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,max,min;
和
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函数是所有函数的入口函数。