day8练习





3.变量的作用域和生存周期
1.作用域:
能够使用变量的范围称为变量的作用域
1.局部变量:
变量作用域在离定义该变量最近的大括号之内
2.全局变量:
变量作用域在整个工程代码中,任意位置都可以使用全局变量
2.生存周期:
变量从开辟空间到空间被回收的过程称为生存周期
1.局部变量:
执行到变量定义时,为变量开辟内存空间
代码执行超过变量作用域,回收变量空间
2.全局变量:
编译时分配全局变量空间
代码运行结束后回收变量空间
练习:加减乘除运算函数

3.存储类型:
存储类型 数据类型 变量名
auto(默认)
自动型存储,将变量存放在栈空间中
register
寄存器存储,将变量存放在CPU内部的寄存器中,如果寄存器存放等价于auto类型
extern
声明一个变量时外部存放的
static
静态存储,将变量存放在静态区中
4.代码运算时计算机内部空间分配:
内存

文本段:存放函数、代码和指令
栈区:存放局部变量(auto)
栈区空间有上限的,默认(8M),不要定义太大空间
栈区是操作系统管理区域,频繁被申请释放,所以未经初始化即为随机值
代码执行到变量定义时开辟空间(栈空间),代码执行超过变量作用域回收空间(栈空间)

数据区:
1.特点:
存放全局变量和静态变量,未经初始化时会初始化0值
程序编译时分配空间
程序结束时回收空间
2.区域划分:
已初始化全局变量/静态变量区域(.data):
存放初始化的全局变量和静态变量
未初始化全局变量/静态变量区域(.bss):
未初始化的全局变量和静态变量
在程序运行时会对.bss端初始化0值
字符串常量区(.rodata):
区域中内容不能修改,修改的话会导致段错误
5.static关键字的作用
1.延长变量的生存周期,局部变量超过作用域被回收,但用static修饰,会在程序结束时回收空间
2.static修饰变量,将变量存放在数据区中,未经初始化时值为0值
3.static限定全局变量作用域只能在本文件中使用
4.static防止全局变量或者全局函数重名


static int b = 0可以忽略不看,b被放在数据区,程序结束才被回收,e是随机值(结果是编译器优化),a是局部变量,,c是全局变量。
4.函数的调用
1.使用形式:
实参个数与形参个数需要匹配
实参与形参类型不一致时,会将实参类型转换为形参类型
练习:判断是否是闰年

2.函数调用时参数的传递
函数调用时实参会将值传递给形参(形参是实参的副本)
5.递归函数
1.定义:函数体定义时调用函数体本身称为递归函数
2.注意:
递归函数一定要有结束条件
避免深层次的递归调用
eg.求阶乘

eg. 汉诺塔问题

6.函数传参
1.值传递
实参将值传递给形参,形参是实参的副本
形参改变,实参不会发生改变
应用场景:
函数体内部想使用函数体外部变量值的时候,使用值传递
1017

被折叠的 条评论
为什么被折叠?



