复习:
自定义函数:
1.函数声明:告诉编译器的格式,方便它检查调用者的参数,返回值
2.隐式声明:当调用函数时如果没有声明,没有定义,编译器会猜测函数的格式,
函数的形参会按照调用者提供的实参来猜,返回值默认int
3.函数定义:如果函数的定义在调用之前,声明可以省略
4.函数传参
值传递:普通变量,函数之间不能共享同名变量
址传递:数组,数组的长度会丢失,需要额外增加一个参数来传递数组的长度,
同时该数组被两个函数共享(调用者和被调用者)
返回值:return语句不是把数据传给调用者,而是把数据放在一个他们都能访问的公共区域, 所有就没有return语句,调用者会从该区域获取一个垃圾数据(上上个函数的返回值)
进程映像:进程映像指的是进程的内存分布
程序:储存在磁盘上的文件(二进制文件,脚本文件)
进程:系统中正在运行的程序,进程映像指的是进程的内存分布情况
text 代码段;储存二进制指令,常量,只读,强制修改时会产生段错误
data 数据段;储存时初始化过的全局变量,静态局部变量
bss 静态数据段;储存时未初始化过的全局变量,静态局部变量
heap 堆;由程序员手动管理,特点足够大
stack 栈;由操作系统管理的,会自动申请,释放内存,大小很有限,超出限制会发生段错误
变量的分类:
储存位置:生命周期:作用范围(作用域):
全局变量:
data或者bss
从程序开始到结束
程序的任意位置
局部变量:
stack
从定义位置开始到函数结束
只能在函数内使用
块变量:定义在if,for,while等语句块内的变量
stack
从定义位置开始到函数结束
只能在语句块内使用
全局变量,局部变量,块变量可以重名,局部变量会屏蔽全局的变量同名变量,块变量会屏蔽局部,全局的同名变量
类型限定符:
auto
用于定义自动申请,释放的变量(局部),不加就代表加