下载此文档

:c语言作用域.ppt


文档分类:IT计算机 | 页数:约19页 举报非法文档有奖
1/19
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/19 下载此文档
文档列表 文档介绍
第 12 章: C语言中用户标识符的作用域和存储类 p-167 局部变量、全局变量和存储分类 : 用户标识符的作用域在 C 语言中,由用户命名的标识符都有一个有效的作用域。所谓标识符的“作用域”就是指程序中的某一部分,在这一部分中,该标识符是有定义的,可以被 C编译和连接程序所识别。 局部变量、全局变量和存储分 p-167 在函数内部或复合语句内部定义的变量,称为局部变量。函数的形参也属于局部变量。在函数外部定义的变量,称为全局变量。有时,局部变量也被称为内部变量,全局变量被称为外部变量。 C语言中,有两种存储类别:一种是自动类;一种是静态类。局部变量既可以说明成自动类;也可以说明成静态类; 而全局变量只能是静态类。有四个与两种存储类别有关的说明符它们是: auto( 自动)、 register( 寄存器)、 static( 静态) 、 extern( 外部)。这些说明符通常与类型名一起出现,它们可以放在类型名的左边,也可以放在类型名的右边。例如: auto int i,j;也可以写成: int auto i , j ; 局部变量及其作用域和生存期 p-168 auto 变量当在函数内部或复合语句内定义变量时,如果没有指定存储类、或使用了 auto 说明符,系统就认为所定义的变量具有自动类别. float a ;就等价于: auto float a ; 所有自动类局部变量的存储单元都是在进入这些局部变量所在的函数体(或复合语句)时生成,退出其所在的函数体(或复合语句)时消失(变为无定义).这就是自动类局部变量的”生存期”.当再次进入函数体(或复合语句)时,系统将为它们另行分配存储单元; 因此变量的值不可能被保留. register 变量 p-169 (1) CPU 中寄存器的数目是有限的,,允许说明为寄存器变量的数目不仅取决于 CPU 的类型,也与所用的 ,或编译程序认为指定的变量不适合放在寄存器中时,将自动按 auto , register 说明只是对编译程序的一种建议,而不是强制性的. (2)由于 register 变量的值是放在寄存器内而不是放在内存中,所以 egister 变量没有地址,也就不能对它进行求地址运算. (3)register 变量的说明应尽量靠近其使用的地方, 用完之后尽快释放, register 变量说明和使用放在复合语句中来实现. 静态存储类的局部变量 p-170 ?在整个程序运行期间,,下次再进入该函数时,,因此这些存储单元中的值得以保留;因而可以继续使用存储单元中原来的值。?静态局部变量的初值是在编译时赋予的,, C编译程序自动给它赋初值 0。 全局变量及其作用域和生存期 p-170 全局变量只有静态一种类别。全局变量是在函数外部任意位置上定义的变量,它的作用域是变量定义的位置开始,到整个源文件结束止。 int sum ; main() { … sum++ ;…} fun1(void) {… sum++ ;…} int test ; fun2(void) {… sum++ ; test=1 ;…} 全局变量的生存期是整个程序的运行期间. 若全局变量和某一函数中的局部变量同名, 则在该函数中,此全局变量被屏蔽,在该函数内,访问的是局部变量,与同名的全局变量不发生任何关系. 课后****题 p-174 以下程序的输出结果为: A)1,6,3,1,3 B)1,6,3,2,3 C)1,6,3,6,3 D)1,7,3,2,3 main( ) { int i=1,j=3 ; printf("%d,",i ++) ; { int i =0 ;i +=j *2; printf ("%d ,% d,“,i ,j );} printf ("%d , %d \n" ,i, j ); }

:c语言作用域 来自淘豆网www.taodocs.com转载请标明出处.

相关文档 更多>>
非法内容举报中心
文档信息
  • 页数19
  • 收藏数0 收藏
  • 顶次数0
  • 上传人luyinyzhi
  • 文件大小249 KB
  • 时间2017-02-27