欢迎来到天天文库
浏览记录
ID:61833215
大小:62.00 KB
页数:8页
时间:2021-03-23
《C语言程序设计-第12章.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第十二章用户标识符的作用域和存储类局部变量、全局变量和存储分类作用域:变量的有效范围局部变量:在函数内部或复合语句内部定义的变量全局变量:在函数外部定义的变量存储分类:自动类和静态类局部变量可以是自动类也可以是静态类全局变量只能是静态类存储类别说明符:auto(自动)、register(寄存器)、static(静态)和extern(外部)C程序在内存中的存储映象动态存储区:特点:动态分配、动态释放。用于保存函数调用时的返回地址、自动类别的局部变量等静态存储区:特点:所分配的地址在程序运行期间都不释放
2、(值可被保留)用于存放全局变量及静态类别的局部变量程序代码区:局部变量及其作用域和生存期auto变量:(存放于动态存储区)当在函数内部、复合语句内定义变量时,默认存储类别为自动类别。也可显示的用auto说明符指定变量的存储类别为自动类别特点:每次进入函数体(或复合语句内部)时分配存储单元、退出时自动释放。作用域:从定义的位置起,到函数体(或复合语句)结束为止。特别提醒:当再次进入函数体时,系统将为它另行分配存储单元,因此变量的值不能被保留。优点:不同函数中可使用同名的变量而不会相互影响registe
3、r变量:寄存器变量(属于自动类变量)与auto变量的区别:建议编译器将变量保留在CPU的寄存器中优点:不占内存地址,访问效率高一般用于频繁引用的少数变量说明:1、CPU中寄存器数目是有限的,只能说明少量的寄存器变量。当编译系统认为不适合放在寄存器中时,将按自动变量来处理。因此,register只是一种建议,而不是强制性的2、由于是放在寄存器中的,所以register变量没有地址。不可对它进行求地址运算。3、register变量的说明应尽可能靠近其使用的地方,用完之后尽快释放,以便提高寄存器的利用效率
4、。静态存储类的局部变量static变量特点:1、在整个程序运行期间,静态局部变量在内存区中占据着永久性的存储单元。即使退出函数以后,下次再进入该函数时,静态局部变量仍使用原来分配的存储单元。也就是说:可以保留该变量中的值。2、静态局部变量的初值是在编译时赋予的,在程序运行期间不再赋予初值。对未赋初值的静态局部变量系统将自动赋初值0全局变量及其作用域和生存期全局变量:在函数外部定义的变量,它只有静态存储一种类别。对于全局变量,可使用extern和static两种说明符。全局变量的作用域:从定义的位置开
5、始到整个源文件的结束。全局变量的生存期:整个程序运行的期间注意:全局变量和函数中的局部变量同名,则在函数内部起作用的是局部变量。特别提醒:除十分必要外,一般不提倡使用全局变量。原因:1、全局变量在整个程序运行期间都占用内存空间2、全局变量必须在函数外部定义,降低了函数的通用性,影响了函数的独立性。3、全局变量使用不当将会产生难以查找的错误用extern说明符扩展全局变量的使用范围一、在同一编译单位中如果全局变量的定义在后,引用它的函数在前时,应该在引用它的函数中用extern对此全局变量进行说明。这
6、时其作用域从extern说明处起,延伸到该函数末尾。注意:全局变量的定义和全局变量的说明不同:变量的定义只能出现一次,在定义全局变量时,不可使用extern说明符;而对全局变量的说明,则可以多次出现在需要的地方。这时必须用extern进行说明。2、在不同的编译单位内用extern说明符来扩展全局变量的作用域。编译单位:每一个可以进行单独编译的源文件称为“编译单位”。当一个程序由多个编译单位组成,并且在每一个源文件中都需要引用同一个全局变量时,可在其中一个文件中定义所有的全局变量,而在其它用到这些全局
7、变量的文件中用extern对这此变量进行说明。优点:系统只为每一个全局变量分配一个存储单元。
此文档下载收益归作者所有