day09 数组形参、递归、全局/局部变量、static

来源:互联网 发布:facebook 程序员薪资 编辑:程序博客网 时间:2024/06/05 07:35
数组可以作为形式参数使用
数组作为形式参数的时候真正的形式参数并
    不是数组,而是一个可以当作数组使用
    的变量
数组形式参数里包含的所有存储区都不是被
    调用函数提供的
声明数组形式参数的时候可以省略表示存储区
   个数的整数
使用数组形式参数的时候需要另外提供一个整数
    类型的形式参数表示数组形式参数里包含
    的存储区个数
通过数组形式参数可以让被调用函数使用其他
   函数提供的存储区
调用函数可以任意使用数组形式参数里的存储区
数组形式参数可以实现双向数据传递,这种
    参数叫输入输出参数

C语言里函数参数的个数可以不固定
这种参数叫变长参数
编写函数的时候不能给变长参数命名,所以
   函数里需要使用特殊的方法得到这些参数
    的内容

如果编译器首先遇到函数调用语句就会猜测函数的格式,编译器认为函数有一个整数类型存储区记录返回值,函数可以有
任意多个不确定类型的形式参数。这个猜测 结果叫做函数的隐式声明。
隐式声明里形式参数的类型只能是整数类型或 双精度浮点类型。
如果函数的真实格式和隐式声明的格式不同则编译就会出错。

函数大括号前面的部分可以单独作为一条语句使用,这种语句叫函数声明语句
函数声明语句里可以省略形式参数名称。
把函数声明语句单独写在文件开头叫函数的显式声明。
函数的显式声明可以避免隐式声明。
除了主函数以外的所有函数都必须显式声明。


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

C语言里函数可以调用自己
能调用自己的函数叫递归函数

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

递归函数编写步骤
1.编写语句解决分解后的每个小问题(假设递归函数已经可以使用)。
2.在函数的开头编写分支用来处理不能分解的情况,这个分支必须保证函数可以结束。


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

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

存储区的使用不受作用域限制(可以跨函数
    使用存储区)
存储区的使用受到生命周期的限制
生命周期指一段时间,在生命周期开始时计算机
   把存储区分配给程序使用,在生命周期结束
    时计算机把程序使用的存储区收回
全局变量的生命周期是整个程序执行期间
局部变量的生命周期是函数一次执行的时间范围,函数开始执行的时候计算机把存储区分配给程序使用,函数结束的时候计算机把存储区回收。如果函数多次执行则每次执行时计算机都会给它分配存储区,每次分配的存储区可能不同。
声明变量的时候可以使用static关键字,这种变量叫做静态变量
静态变量的生命周期是整个程序执行时间。
只要程序没有结束在静态变量的存储区都可以使用。
如果一个函数多次执行则每次执行的时候静态局部变量对应的存储区都是同一个。
没有初始化的静态变量会自动被初始化成0。
静态变量的初始化只在程序开始的时候执行一次。
静态全局变量的作用域只包含声明它的文件里面的所有语句(不可以跨文件使用静态全局 变量的)。

指针变量用来记录地址数据。
指针变量是用来找到另外一个普通变量的。
只有记录有效地址的指针才能使用。
声明指针变量的时候要在变量名称前加*。
捆绑过的指针前使用*操作符可以表示指针捆绑的存储区。

指针也分类型,不同类型的指针适合与不同类型的存储区捆绑。

可以在一条语句里声明多个同类型的指针变量,这个时候需要在每个指针变量名称前单独加*。

没有捆绑过的指针分成以下两类
1.空指针记录空地址(NULL),这个地址的数值
    就是数字0
2.其他没有捆绑过的指针都叫野指针

程序里禁止出现野指针
所有指针变量必须初始化

指针变量初始化的时候*没有参与赋值过程


预习:
    1.指针
    2.字符串
阅读全文
0 0
原创粉丝点击