C语言基础 8 函数 递归 变量
2017-09-07 16:35
405 查看
数组可以作为形式参数使用,和数组形式参数配合使用的实际参数应该是一个存储区的地址,通常用数组名称
数组做形式参数的时候只是把形式参数写成数组的样子,真正的形式参数并不是数组而是一个可以当作数组使用的变量
数组形式参数里包含的存储区都不是被调用函数提供的
可以省略数组形式参数声明里中括号中间的整数
数组做形式参数的时候需要另外准备一个整数类型的形式参数,用来表示数组形式参数里包含的存储区个数
调用函数可以任意使用数组形式参数里包含的存储区,所以可以利用数组形式参数实现双向数据传递这种参数叫做输入输出参数
C语言里函数参数的个数可以不固定
这种参数叫做变长参数,变长参数不可以在编写函数的时候进行命名,在被调用函数里需要使用特殊方法才能得到没有命名的参数内容
如果编译器在编译的时候首先遇到函数调用语句就猜测函数的个数,猜测结果里函数有一个整数类型的返回值,函数可以有任意多个任意类型的形式参数
这个猜测结果叫做函数的隐式声明
函数隐式声明里参数的类型只能是int或者double
如果函数的实际格式和隐式声明的格式不一样就会编译出错
函数大括号前面的部分可以单独写成一条语句,这种语句叫做函数声明语句
函数声明语句里可以省略形式参数名称
可以把函数声明语句单独写在文件开头,这叫做函数的显式声明
函数显式声明可以避免隐式声明,除了主函数以外的所有函数都应该进行显式声明
exit标准函数可以立刻结束整个程序的执行
为了使用这个标准函数需要包含stdlib.h头文件
这个函数使用的时候需要一个整数类型的实际参数,这个实际参数的作用和主函数的返回值一样
C语言里函数可以调用自己这种函数叫做递归函数
如果一个问题可以分解成几个小问题,至少一个小问题和原来的问题本质上一样,只不过稍微简单一点。这种问题就可以采用递归函数解决。
编写递归函数的步骤
1.编写语句解决分组后的每个小问题
(假设递归函数已经可以使用)
2.在递归函数的开头编写分支处理不可
分解的情况。(这个分支必须可以
让函数结束)
使用递归函数解决问题的思路叫递归
使用循环解决同样问题的思路叫递推
程序中一个变量只能被某些语句使用,这些语句叫做这个变量的作用域
声明在函数里面的变量叫局部变量,局部变量的作用域包含函数里面的所有语句
声明在所有函数外边的变量叫全局变量,全局变量的作用域包含程序里的所有语句
没有初始化的全局变量自动被初始化成0
全局变量可以和局部变量重名,这个变量名称优先代表局部变量
如果全局变量和局部变量都可以满足程序要求应该优先使用局部变量
<
4000
br />
存储区的使用不受作用域限制(可以跨函数使用存储区)
存储区的使用受到生命周期的限制
生命周期是一段时间,存储区只能在这段时间里才能使用
全局变量的生命周期是整个程序的执行时间
局部变量的生命周期是函数某一次执行的时间范围
如果一个函数多次执行则局部变量每次代表的存储区都不同
使用static关键字可以声明静态变量
静态变量的生命周期一定是整个程序的执行时间,只要程序没有结束则静态变量的存储区随时可以使用
静态局部变量在函数每次执行的时候对应的存储区都是同一个
没有初始化的静态变量自动被初始化成0
静态变量的初始化只在程序开始的时候执行一次
静态全局变量的作用域只包含声明它的文件里面的所有语句(不可以跨文件使用静态全局变量)
指针变量用来记录存储区的地址
只有记录有效地址的指针变量才可以使用,在有效指针变量名称前使用*操作符可以表示地址对应的存储区
指针也分类型,不同类型的指针适合与不同类型的存储区捆绑
可以在一条语句中声明多个同类型指针变量,这个时候要在每个指针变量名称前单独加(*)
没有记录有效地址的指针分成两类
1.空指针里记录空地址(NULL,这个地址的数值就是数字0)
2.其他所有无效指针统称为野指针
程序员应该保证程序里不会出现野指针所有指针变量必须初始化
初始化的时候*没有参与赋值过程,被修改的是指针变量本身的存储区
数组做形式参数的时候只是把形式参数写成数组的样子,真正的形式参数并不是数组而是一个可以当作数组使用的变量
数组形式参数里包含的存储区都不是被调用函数提供的
可以省略数组形式参数声明里中括号中间的整数
数组做形式参数的时候需要另外准备一个整数类型的形式参数,用来表示数组形式参数里包含的存储区个数
调用函数可以任意使用数组形式参数里包含的存储区,所以可以利用数组形式参数实现双向数据传递这种参数叫做输入输出参数
C语言里函数参数的个数可以不固定
这种参数叫做变长参数,变长参数不可以在编写函数的时候进行命名,在被调用函数里需要使用特殊方法才能得到没有命名的参数内容
如果编译器在编译的时候首先遇到函数调用语句就猜测函数的个数,猜测结果里函数有一个整数类型的返回值,函数可以有任意多个任意类型的形式参数
这个猜测结果叫做函数的隐式声明
函数隐式声明里参数的类型只能是int或者double
如果函数的实际格式和隐式声明的格式不一样就会编译出错
函数大括号前面的部分可以单独写成一条语句,这种语句叫做函数声明语句
函数声明语句里可以省略形式参数名称
可以把函数声明语句单独写在文件开头,这叫做函数的显式声明
函数显式声明可以避免隐式声明,除了主函数以外的所有函数都应该进行显式声明
exit标准函数可以立刻结束整个程序的执行
为了使用这个标准函数需要包含stdlib.h头文件
这个函数使用的时候需要一个整数类型的实际参数,这个实际参数的作用和主函数的返回值一样
C语言里函数可以调用自己这种函数叫做递归函数
如果一个问题可以分解成几个小问题,至少一个小问题和原来的问题本质上一样,只不过稍微简单一点。这种问题就可以采用递归函数解决。
编写递归函数的步骤
1.编写语句解决分组后的每个小问题
(假设递归函数已经可以使用)
2.在递归函数的开头编写分支处理不可
分解的情况。(这个分支必须可以
让函数结束)
使用递归函数解决问题的思路叫递归
使用循环解决同样问题的思路叫递推
程序中一个变量只能被某些语句使用,这些语句叫做这个变量的作用域
声明在函数里面的变量叫局部变量,局部变量的作用域包含函数里面的所有语句
声明在所有函数外边的变量叫全局变量,全局变量的作用域包含程序里的所有语句
没有初始化的全局变量自动被初始化成0
全局变量可以和局部变量重名,这个变量名称优先代表局部变量
如果全局变量和局部变量都可以满足程序要求应该优先使用局部变量
<
4000
br />
存储区的使用不受作用域限制(可以跨函数使用存储区)
存储区的使用受到生命周期的限制
生命周期是一段时间,存储区只能在这段时间里才能使用
全局变量的生命周期是整个程序的执行时间
局部变量的生命周期是函数某一次执行的时间范围
如果一个函数多次执行则局部变量每次代表的存储区都不同
使用static关键字可以声明静态变量
静态变量的生命周期一定是整个程序的执行时间,只要程序没有结束则静态变量的存储区随时可以使用
静态局部变量在函数每次执行的时候对应的存储区都是同一个
没有初始化的静态变量自动被初始化成0
静态变量的初始化只在程序开始的时候执行一次
静态全局变量的作用域只包含声明它的文件里面的所有语句(不可以跨文件使用静态全局变量)
指针变量用来记录存储区的地址
只有记录有效地址的指针变量才可以使用,在有效指针变量名称前使用*操作符可以表示地址对应的存储区
指针也分类型,不同类型的指针适合与不同类型的存储区捆绑
可以在一条语句中声明多个同类型指针变量,这个时候要在每个指针变量名称前单独加(*)
没有记录有效地址的指针分成两类
1.空指针里记录空地址(NULL,这个地址的数值就是数字0)
2.其他所有无效指针统称为野指针
程序员应该保证程序里不会出现野指针所有指针变量必须初始化
初始化的时候*没有参与赋值过程,被修改的是指针变量本身的存储区
相关文章推荐
- C语言基础知识之(十二):结构体作为函数的参数(结构体变量、结构体数组)
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符. 分类: iOS学习 c语言基础 2015-06-10 21:39 25人阅读 评论(0) 收藏
- C语言基础之--变量、内部函数与外部函数
- C语言基础:进制转换,变量,常量,表达式,基本数据类型,输出函数,输入函数,运算符.
- 黑马程序员--C语言基础之--变量、内部函数与外部函数
- PHP语言基础(标记、注释、变量、数组、常量、函数)
- C语言基础知识(个人简单总结的关于变量和函数方面)
- C语言基础知识——常变量以及输入输出函数
- DirectX 3D_基础之HLSL(高级着色语言) HLSL着色器程序的编制 HSLS变量 HLSL入口函数 HLSL程序编译 变量常量类型 设置方法 前缀 关键字 类型 语句 类型转换
- 【Kotlin 语言】1. 环境安装 | 变量 | 简单使用 | 函数 | 异常 | 递归
- c语言基础4—static、extern对函数和变量的作用
- 郝斌的C语言基础 159-161 通过函数完成对结构体变量的输入输出
- 学ios需要了解的C语言基础知识-10-内外部函数,内外部变量
- swift基础(一) 变量和常量和函数
- Linux-C基础知识学习:C语言作业-将5个学生成绩保存在一个数组中,单独实现一个计算平均成绩的average函数, 在main函数中获取该函数返回的平均值,并打印。
- Java之--Java语言基础组成—函数
- 黑马程序员——C语言基础--函数的学习总结
- C语言基础的函数理解
- 黑马程序员——C语言基础05—函数
- ThinkPHP开发基础知识 函数变量定义等