1 / 33
文档名称:

第19章 生存期、作用域与可见域.ppt

格式:ppt   页数:33
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

第19章 生存期、作用域与可见域.ppt

上传人:燕赵才子 2011/7/19 文件大小:0 KB

下载得到文件列表

第19章 生存期、作用域与可见域.ppt

文档介绍

文档介绍:第19章生存期、作用域与可见域
有时兴致勃勃地写完一大页的程序,编译链接却跳出了很多奇奇怪怪的错误,比如某某变量未定义,某某函数找不到,你可能在嘀咕,这个函数明明在这里啊,那不是某某变量么?是不是编译器有问题啊?读完本章你就会发现,编译器没有问题,是函数、变量的作用域、生存期与可见域在作怪。
可能涉及到的程序要素有:变量(普通类型的变量、结构体变量和共用体变量的统称),常量、函数以及结构体、共用体的定义等。
内存分配
变量名、函数名等都对应着内存中的一块区域,那这些实体在内存中是如何存放的呢,程序又是如何使用这些变量的,首先从C程序内存分配入手,一步步回答这些问题。
内存分区
一个由C编译的程序占用的内存大致分为以下几部分:
栈区(stack):由编译器自动分配释放,存放函数的参数值,局部变量的值等。
堆区(heap):一般由程序员分配释放(动态内存申请与释放),若程序员不释放,程序结束时可能由操作系统回收。
全局区(静态区)(static):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域,该区域在程序结束后由操作系统释放。
常量区:字符串常量和其他常量的存储位置,程序结束后由操作系统释放。
程序代码区:存放函数体的二进制代码。
变量的存储类别
C语言中,变量的存储类别大致分为4种:auto(自动)、register(寄存器)、static(静态)和extern(外部)。其中,auto和register变量属于自动分配方式,而static和extern变量属于静态分配方式。不同分配方式下,变量的生存期、作用域和可见域各不相同。
按作用域分,变量可分为局部变量和全局变量,所谓局部变量,是指在函数内部定义的变量,局部变量仅在定义它的函数内才能有效使用,其作用域仅限在函数内,即从变量定义的位置开始,到函数体结束。通常,编译器不为局部变量分配内存单元,而是在程序运行中,当局部变量所在的函数被调用时,系统根据需要临时为其分配内存。当函数执行结束时,局部变量被撤销,占用内存被收回。
在函数外定义的变量称为全局变量,也称外部变量,全局变量的作用域较广,全局变量不属于任何一个函数,理论上可被其作用域中的所有函数访问,因此,提供了一个不同函数间联系的途径,使函数间的数据联系不只局限于参数传递和return语句。全局变量一经定义,编译器会为其分配固定的内存单元,在程序运行期间,这块内存单元始终有效,一直到程序执行完毕才由操作系统收回该块内存。
生存期
通俗地讲:生存期指的是在程序运行过程中,变量从创建到撤销的一段时间。生存期的长短取决于前面所讲的存储方式,对于自动分配(栈分配),变量与其所在的代码块共存亡;对于静态分配(编译器预分配),变量与程序共存亡,程序开始执行时即已存在,一致到程序运行完毕退出后才撤销;对于动态存储的内存块(注意:不是指向该内存块的指针),由程序员决定其生存期。
对程序代码区的函数、常量区的字符串常量和其他常量等、结构体和共用体的定义等来说,生存期的讨论没有意义,因为它们都是与程序共存亡的。
作用域与可见域
在程序代码中,变量有效的范围(源程序区域)称为作用域,能对变量、标识符进行合法的访问的范围(源程序区域)称为可见域,可以这样说,作用域是变量理论上有效的区域,而可见域是变量实际有效的区域,可见域是作用域的子集。
可以将C语言的作用域分为以下几类:
(1)块作用域
自动变量(auto、register)和内部静态变量(static)具有块作用域,在一个块内声明的变量,其作用域从声明点开始,到该块结束为止。函数定义中声明的形参,其作用域限定在该函数体内,与其他函数中声明的同名变量不是一回事,允许在不同的函数中使用相同的变量名,编译器将为这些变量分配不同的存储单元,不会混淆。
(2)文件作用域
外部静态变量(static)具有文件作用域,从声明点开始到文件末尾,此处所指的文件是编译基本单位—c文件。
(3)全局(程序)作用域
全局变量(extern)具有全局作用域,只要在使用前对其进行声明,便可在程序(由若干个文件组成)的任意位置使用全局变量。
auto变量
函数的形参及代码块中定义的变量都属于auto变量,这是C语言中应用最广的一种变量,这类变量是栈分配的,是动态分配存储空间的。举函数形参为例,当调用该函数时,为形参分配存储空间,当函数调用结束时,就自动释放这些存储空间。对代码块中定义的变量(包含函数中定义的变量),当执行到变量声明语句时,系统为这些auto变量分配空间,当程序流程离开代码块时,这些变量被自动撤销,其占用的内存空间被释放。

最近更新

2024年吉安幼儿师范高等专科学校单招职业技能.. 41页

2024年吉林司法警官职业学院单招职业倾向性测.. 40页

2024年吉林水利电力职业学院单招职业技能考试.. 40页

2024年吉林省四平市单招职业适应性测试模拟测.. 40页

2024年吉林省白山市单招职业倾向性考试模拟测.. 40页

2024年吉林职业技术学院单招职业技能测试模拟.. 39页

高频高速电路设计技术 37页

2024年吕梁职业技术学院单招综合素质考试模拟.. 38页

2024年呼和浩特职业学院单招职业适应性测试模.. 40页

2026年优秀护士先进事迹材料 38页

2026年优秀少先队员先进事迹材料范文 27页

钢轨损伤机理分析 36页

2024年哈尔滨铁道职业技术学院单招职业倾向性.. 41页

2026年优秀六年级写事作文 22页

2024年唐山科技职业技术学院单招职业技能考试.. 40页

2024年商丘学院单招职业适应性测试模拟测试卷.. 41页

肝肿瘤超声弹性成像技术优化 36页

2026年优秀三分钟演讲稿主题 11页

肝脂肪变性与炎症因子变化 36页

2024年四川国际标榜职业学院单招职业倾向性考.. 40页

2024年四川工业科技学院单招职业技能测试模拟.. 41页

2026年企业车队队长年终个人工作总结 9页

2024年四川托普信息技术职业学院单招职业技能.. 39页

2024年四川文化产业职业学院单招职业适应性考.. 41页

2024年四川水利职业技术学院单招职业技能测试.. 41页

2024年四川现代职业学院单招职业技能考试模拟.. 41页

网络攻击行为的深度学习分析-第1篇 40页

2024年四川航天职业技术学院单招职业技能测试.. 40页

绿色交通规划与实施-第1篇 37页

肿瘤微环境中微生物群落的表型特征分析 29页