嵌入式学习day9

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.值传递

实参将值传递给形参,形参是实参的副本

形参改变,实参不会发生改变

应用场景:

函数体内部想使用函数体外部变量值的时候,使用值传递

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值