7.2 变量的生命周期-高二《新概念C语言能力教程》同步教学课件 (电工版2020)
2023-06-12
|
17页
|
123人阅读
|
0人下载
精品
内容正文:
第7章 函数
第7章 函数
函数定义
函数调用及函数声明
数组作形参
变量的作用域
全局变量作用域的扩展
限制文件作用域
函数的易用性
递归1
递归2
库函数1
库函数2
团队开发++
变量的生命周期
这节课我们讨论变量的生命周期。
3
局部变量的生命周期
变量的生命周期就是变量标识的存储单元从分配到回收的这一段时间。
执行到变量定义语句时,分配局部变量的存储单元;局部变量所在复合语句执行完毕,回收局部变量的存储单元。
程序运行时,main函数开始执行,语句int i = 6;定义了一个局部变量i,值被初始化为6。变量i的生命周期开始。
到第6行时,main函数执行完毕,变量i的存储单元被回收,生命周期结束。
变量的生命周期就是变量标识的存储单元从分配到回收的这一段时间。
执行到变量定义语句时,分配局部变量的存储单元;局部变量所在复合语句执行完毕,回收局部变量的存储单元。
程序运行时,main函数开始执行,语句int i = 6;定义了一个局部变量i,值被初始化为6。变量i的生命周期开始。
到第6行时,main函数执行完毕,变量i的存储单元被回收,生命周期结束。
4
例7-11 分析函数f的执行过程,函数的返回值为何总相同?
函数f每次执行都会重新分配变量i的存储单元,因此,返回值总相同。
局部变量又称为动态变量。
函数f执行时,先定义一个局部变量i,并初始化为9,生命期开始,自增1,返回值为10,函数执行结束后,
只在约定的匿名存储单元中保留了一个整数10,变量i的存储单元被回收,生命期结束。
再次调用f函数时,会重新分配局部变量i的存储单元,并初始化为9;自增1,返回值为10,变量i的存储单元被回收,生命期结束。
函数f每次执行都会重新分配变量i的存储单元,因此,返回值总相同。
局部变量又称为动态变量。
main函数不能函数f中的局部变量i,一是因为变量i的作用域仅限在函数f即第3行至第5行。二是因为变量i标识的存储单元已经收回了。
5
作用域与生命周期
swap函数不能使用变量m和n是由于
作用域的限制,尽管这两个变量仍
然在生命周期中。
main函数不能使用变量x和y是由于
作用域的限制,并且swap函数返回,
main函数继续执行时,变量x和y的
存储单元也已经释放。
swap函数不能使用变量m和n是由于作用域的限制,尽管这两个变量仍
然在生命周期中。
main函数不能使用变量x和y是由于作用域的限制,并且swap函数返回,
main函数继续执行时,变量x和y的存储单元也已经释放。
6
全局变量的生命周期
程序开始运行时,main函数执行之前,为全局变量分配存储单元,main函数执行完毕,程序结束运行前,回收全局变量的存储单元。全局变量的生命周期贯穿程序运行的全过程。
程序的运行过程:程序开始运行→分配全局变量的存储单元→main函数执行→被调函数执行→main函数执行完毕→回收全局变量的存储单元→程序运行结束
生命周期贯穿程序运行的全过程为全局变量的“全文件” 使用奠定了基础。
程序开始运行时,main函数执行之前,为全局变量分配存储单元,main函数执行完毕,程序结束运行前,回收全局变量的存储单元。全局变量的生命周期贯穿程序运行的全过程。
程序的运行过程:程序开始运行→分配全局变量的存储单元→main函数执行→被调函数执行→main函数执行完毕→回收全局变量的存储单元→程序运行结束
生命周期贯穿程序运行的全过程为全局变量的“全文件” 使用奠定了基础。
7
例7-12 分析程序的运行过程
两次同样的函数调用,f函数返回了不同的结果。
这是因为f函数使用了全局变量g_i,而全局变量不会受f函数的影响,f函数返回后变量的值不会改变。当f函数再次使用全局变量i时,其值为10而不是9。
程序先为全局变量i分配存储单元,并初始化为9,main函数调用f函数,变量i的值自增1,返回10;
main函数继续执行,当再次调用f函数时,变量i的值再次自增1,返回11。
两次同样的函数调用,f函数返回了不同的结果。
这是因为f函数使用了全局变量i,而全局变量不会受f函数的影响,f函数返回后变量的值不会改变。
当f函数再次使用全局变量i时,其值为10而不是9
用相同的实参调用函数,若可以得到不同的函数值,则函数的可理解性及可用性会很差。
8
作用域重叠的同名变量
C语言规定,多个作用域不同的同名变量在共同作用域内,后定义的变量有效,也就是作用域最小的变量起作用。
不同的命名规则,可以避免全局变量与局部变量重名;
局部变量应避免同名。
C语言规定,多个作用域不同的同名变量在共同作用域内,后定义的变量有效,也就是作用域最小的变量起作用。
由程序的输出可知,后定义的变量也就是“最近”定义的变量。
为了避免程序的可读性变差,程序中不应出现
由于学科网是一个信息分享及获取的平台,不确保部分用户上传资料的 来源及知识产权归属。如您发现相关资料侵犯您的合法权益,请联系学科网,我们核实后将及时进行处理。