文档详情

第七章函数-new2讲课.ppt

发布:2017-05-08约2.16万字共71页下载文档
文本预览下载声明
C、变量的声明方式小结 [auto] 类型符 变量名 是自动变量(局部变量) static 类型符 变量名 register 类型符 变量名 声明为寄存器局部变量 extern 变量名 声明外部变量,扩展作用域 声明静态的局部变量 声明静态的外部变量(不允许扩展作用域) D、变量存在的时间小结 全局变量(外部变量):在程序的整个运行期间。 静态局部变量(用static声明的局部变量): 在程序的整个运行期间。 自动变量(未用static声明的局部变量): 从函数调用到该函数结束。 寄存器变量:属于自动变量。 变量存储类型 静态 动态 存储方式 程序整个运行期间 函数调用开始至结束 生存期 编译时赋初值,只赋一次 每次函数调用时 赋初值 自动赋初值0或空字符 不确定 未赋初值 静态存储区 动态区 存储区 寄存器 局部变量 全局变量 作用域 定义变量的函数或复合语句内 本文件 其它文件 局部变量默认为auto型 register型变量个数受限,且不能为long, double, float型 局部static变量具有全局寿命和局部可见性 extern不是变量定义,可扩展外部变量作用域 register 局部static auto 全局static 全局 存储类别 例 文件file1.c int a; void main( ) { ……. ……. f2(); ……. f1(); ……. } void f1( ) { auto int b; ……… f2(); …….. } void f2( ) { static int c; ……… } C作用域 b作用域 a作用域 main f2 f1 main f1 f2 main a生存期: b生存期: c生存期 : 例 auto 变量的作用域 void main() { void prt(); int x=1; { int x=3; prt(); printf(“2nd x=%d\n”,x); } printf(“1st x=%d\n”,x); } void prt() { int x=5; printf(“3th x=%d\n”,x); } 运行结果: 3th x=5 2nd x=3 1st x=1 x=1作用域 x=1作用域 x=3作用域 x=5作用域 void main() { void increment(); increment(); increment(); increment(); } void increment() { int x=0; x++; printf(“%d\n”,x); } 例 局部静态变量 运行结果:1 1 1 void main() { void increment(); increment(); increment(); increment(); } void increment() { static int x=0; x++; printf(“%d\n”,x); } 运行结果:1 2 3 例 变量的寿命与可见性 #include stdio.h int i=1; void main() { static int a; register int b=-10; int c=0; printf(-----MAIN------\n); printf(i:%d a:%d \ b:%d c:%d\n,i,a,b,c); c=c+8; other(); printf(-----MAIN------\n); printf(i:%d a:
显示全部
相似文档