━━函数定义和调用.pptVIP

  • 3
  • 0
  • 约1.7万字
  • 约 38页
  • 2019-11-06 发布于广东
  • 举报
变量的存储类型和生存期 auto自动类型变量: ①声明局部变量时,用auto修饰属自动类型变量,存放在局部数据区,即栈区 。 ②auto局部变量在程序运行到其作用域时在栈区分配,在离开其作用域时即被释放,因此生存期仅在其作用域内。 ③声明局部变量时若省略存储类型,C++编译器默认为auto。 ④自动类型变量未初始化时,其初值不确定。 ⑤全局变量无自动类型。 变量的存储类型和生存期 static静态类型变量: ①声明局部变量时,用static修饰属静态类型变量,存放在全局数据区,即静态区 。 ②static局部变量的生存期:在程序运行中第一次进入其作用域时在静态区分配,离开其作用域时并不释放,只是不能引用,若程序运行中再次进入该static局部变量的作用域,由于该变量已经存在,所以不再分配空间,可直接引用。 static局部变量直到程序运行结束才被释放。 ③static局部变量的作用:是保存函数的运行结果,以便再次调用该函数时,能继续使用上次调用的计算结果。注意,不在其作用域时,不能直接引用;若需引用,可间接实现,即通过该 static 局部变量的地址进行访问(后续章节介绍)。 变量的存储类型和生存期 ④全局变量声明时无论前面加或不加static,都具有静态生存期,因为全局变量都存放在全局数据区,即静态区 。 ⑤但用 static 修饰的全局变量,称为静态全局变量。静态全局变量与一般的全局变量在形式上类似,但含义有所不同,静态全局变量只能在其定义的源文件中有效(该文件中可以有若干个函数),而在该程序的其他源文件中则是无效的;而一般的全局变量可以通过 extern 修饰后,作用于该程序的多个源文件。 ⑥静态类型变量未初始化时,其初值为0。 【例】 # include iostream.h int a = 1 , b = 2 ; //a、b为全局变量,在静态区 int fun ( ) { static int a =3 ; //a为静态局部变量,在静态区 int b = 4 ; //b为auto局部变量,在栈区 a += b ; return a ; } void main ( ) { int a = 5 , b = 6 ; //a、b为auto局部变量,在栈区 cout “a=” a “\tb=” b endl ; for ( int i=1 ; i=3 ; i++ ) { cout “第” i “次调用:” fun( ) endl ; cout “a=” a “\tb=” b endl ; } cout “a=” ::a “\tb=” ::b endl ; } 运行: a=5 b=6 第1次调用: 7 a=5 b=6 第2次调用:11 a=5 b=6 第3次调用:15 a=5 b=6 a=1 b=2 【例】(与上例比较) # include iostream.h int a = 1 , b = 2 ; //a、b为全局变量,在静态区 int fun ( ) { int a = 3 ; //a为auto局部变量,在栈区 int b = 4 ; //b为auto局部变量,在栈区 a += b ; return a ; } void main ( ) { int a = 5 , b = 6 ; //a、b为auto局部变量,在栈区 cout “a=” a “\tb=” b endl ; for ( int i=1 ; i=3 ; i++ ) { cout “第” i “次调用:” fun( ) endl ; cout “a=” a “\tb=” b endl ; } cout “a=” ::a “\tb=” ::b endl ; } 运行: a=5 b=6 第1次调用: 7 a=5 b=6 第2次调用: 7 a=5 b=6 第3次调用: 7 a=5 b=6 a=1 b=2 变量的存储类型和生存期 register寄存器类型变量: ①声明

文档评论(0)

1亿VIP精品文档

相关文档