11月22日

C++学习笔记(14)

1.每个函数都是独立定义的模块;函数之间可以互相调用。

2.每个应用程序只有一个main函数,由系统启动。系统只会启动这个函数,其他函数需要用main函数带动。

3.嵌套调用:函数之间互相调用;
递归调用:函数自身调用; //经典例题:汉诺塔;
(又分直接递归和间接递归)

4.系统设置有一个 先进后出 的 堆栈 进行调用信息的管理。

5.构成递归函数两个基本要素
①描述问题规模逐步缩小的递归算法;
②描述递归情况的终止条件;

6.每条指令和函数都有一个首地址,函数的首地址称为函数的入口地址(或称为 函数指针)。
一个已经定义的函数,他的名字就是入口地址。

7.函数地址测试:编译器调用函数不需要区分名和地址;
代码:
#include
using namespace std;
void simple()
{
cout << “It is a simple program.\n”;
}

int main()
{
cout << “Call function…\n”;
simple(); //名方式调用;
(&simple)(); //地址方式调用;
(*&simple)(); //间址调用;
cout << “Address of function:\n”;
cout << simple << endl; //函数名是地址;
cout << &simple << endl; //取函数地址;
cout << *&simple << endl; //函数地址所指的对象;
cout << *simple; //书中没有,自己测试。
}

运行结果:
Call function…
It is a simple program.
It is a simple program.
It is a simple program.
Address of function:
00D011A4
00D011A4
00D011A4
00D011A4

8.函数调用指令要做的是:找到函数入口,传递参数。
函数地址(实参表)

9.函数的类型:函数的接口,包括函数的参数定义和返回类型。
类型(形参表) (例:double(double,double) )

10.关键字typedef用一个 标识符 命名 类型。
函数类型名 定义的一般形式:
typedef 类型 函数类型名(形参表)
例:
typedef double functionType(double,double);
functionType max,min,average;
等价于:
double max(double,double);
double min(double,double);
double average(double,double);

typedef也可以用于定义标准类型的别名。
例:
typedef int integer;
integer a,b;
等价于:
int a,b;

11.函数指针
定义指向某一类函数的指针变量:
函数类型 * 指针变量名;

类型( *指针变量名)(形参表);
(注:因为“()”的优先级高于“ *”,所以( *指针变量名)的圆括号不能省,否则变成了一个返回类型为指针值的函数原型。)

还可以用typedef定义指针类型:
typedef 类型( *指针类型)(形参表);

typedef 函数类型 * 指针类型;
其中,“指针类型”是用户定义的类型名。

一个已经定义的函数指针赋给函数地址后就可以调用函数了。
调用形式为:
( *指针变量名)(实参表)

指针变量名(实参表)

上一篇:「题解」Codeforces 1605 D Treelabeling


下一篇:2021.12.3 typedef和define区别