递归、作用域、生命周期(day09)

数组可以作为形式参数使用
数组做形式参数的时候真正的形式参数并
   不是数组而是一个可以作为数组使用的
   变量
数组形式参数里包含的存储区都不是被调用
   函数提供的
声明数组形式参数的时候可以省略中括号
   里的整数
使用数组形式参数的时候必须配合一个整数
    类型的形式参数,这个参数用来表示
    数组里的存储区个数
数组形式参数可以让被调用函数使用其他函数
    的存储区
调用函数和被调用函数都可以自由使用数组
   形式参数里的存储区,所以数组形式参数
   可以实现双向数据传递,具有这种特征的
   形式参数叫输入输出参数

C语言里函数参数的个数可以不固定
这种参数叫做变长参数
不能在编写函数的时候给变长参数命名,
    在被调用函数里可以通过特殊的方法
    获得没有命名参数的内容

如果编译器首先遇到函数调用语句就会猜测
   函数的格式。计算机认为函数有一个整数
   类型的存储区用来存放返回值,函数可以
   接受任意多个不确定类型的参数。
这个猜测结果叫做函数的隐式声明
隐式声明里参数的类型只能是整数类型或
    双精度浮点类型
如果函数的真实格式和隐式声明格式不同
    则编译的时候就会出错
可以把函数大括号前面的部分单独写成一条
    语句,这种语句叫做函数声明语句
把函数声明语句放在文件开头叫做显式函数
    声明
函数的显示声明可以避免隐式声明的发生
函数声明语句里可以省略形式参数的名称

除了主函数以外的所有函数都应该显示声明

exit标准函数可以立刻结束程序的执行
为了使用这个标准函数需要包含stdlib.h头文件
这个函数需要一个整数类型的参数,这个参数
    的作用和主函数返回值的作用一样

C语言里函数可以调用自己
这种函数叫做递归函数

如果一个问题可以拆分成多个小问题,至少
   一个小问题和原来的问题在本质上一样但是
   稍微简单一点。这种问题就适合采用递归
   函数解决。

递归函数编写步骤
1.编写语句解决分解后的每个小问题
    (这个时候要假设递归函数已经完成,
     可以使用)
2.在递归函数开头编写分支解决不可分解
    的情况(这个分支必须可以让函数结束)

使用递归函数解决问题的方法叫递归
使用循环解决类似问题的方法叫递推

检验递归函数的时候先用最简单的参数检验,
     然后逐渐把参数变复杂继续检验。如果
     所有参数的检验都能成功就说明递归
     函数编写正确。

C语言里一个变量只能被某些语句使用,能
    使用某个变量的所有语句叫做那个变量
    的作用域
声明在某个函数里面的变量叫做局部变量
局部变量的作用域就是函数里面的所有语句
声明在所有函数外边的变量叫全局变量
全局变量的作用域包含程序里的所有语句
没有初始化的全局变量会自动被初始化成0
全局变量和局部变量可以重名,重名变量名
    优先代表局部变量
如果全局变量和局部变量都能解决问题就
    应该优先选用局部变量

存储区的使用不受作用域限制,但是受到
    生命周期限制
生命周期指一段时间,在生命周期开始的时候
    计算机把存储区分配给程序使用,在
    生命周期结束的时候计算机把存储区收回
全局变量的生命周期就是整个程序的执行时间
局部变量的生命周期是函数某一次执行的
    时间范围
原文地址:https://www.cnblogs.com/Kernel001/p/7735178.html