变量的作用域与生存期--深入理解变量的使用new课件
变量的作用域与生存期,深入理解变量的使用,一、问题的提出与课题引入,1、变量能被不同的函数使用 或变量不能被不同的函数使用,2、变量的值能被不同的函数累计使用 变量的值不能被不同的函数累计使用,变量的作用有效范围问题:变量作用域,变量值在内存或寄存器中存在时间问题:变量生存期,二、变量的定义、申明与引用,#include int main() int max();extern int A,B,C;printf(请输入三个整数:) scanf(%d,%d,%d,二、变量的定义、申明与引用,#include int A,B,C; int main() int max();printf(请输入三个整数:) scanf(%d,%d,%d,三、 变量的基本类型,1、局部变量内部变量,在函数内部或函数中复合语句内部定义的变量称为局部变量。,void sub( int a ) int b; int c; for( int i =0;i<10;i+) ,/形参属于局部变量,/函数内部定义的变量属于局部变量,/复合语句内部定义的变量属于局部变量,/循环变量属于局部变量,三、 变量的基本类型,2、全局变量外部变量全程变量,在函数外部定义的变量称为全局变量。,file1.c extern A; int main() extern B; B=1; A=2; int B;,file2.c int A; void fun(int n) ,/函数外可以是函数前,也可以是函数后,还可以在文件外,四、局部变量作用域,局部变量的作用域是从该变量被申明(定义)位置开始,一直到该函数或复合句结束。,void sub( int a ) ,for( int i =0;i<10;i+),void sub( ) int a; ,int i; for( i =0;i<10;i+),void sub( int a ) i=i+1; int b; int c; a=a+1; b=b+1; c=c+1; for( int i =0;i<10;i+) a=a+1; b=b+1; c=c+1; i=i+1; ,五、 局部变量的生存期,动态存储的局部变量(自动变量、寄存器变量)的值存储在内存用户区的动态存储区,其生存期为本函数一次调用的作用域。,void fun1() int A=0; A=A+1; int main() fun1(); fun1(); return 0; ,六、全局变量作用域,全局变量的作用域是从该变量被申明(定义)位置开始,一直到本源文件结束。,外部变量增加了函数间数据联系的渠道,extern int A; int main() extern int B; return 0; void fun1() A=A+1; B=B+1; C=C+1; int A; int B; int C; Void fun2() A=A+1; B=B+1; C=C+1; ,七、全局变量生存期,全局变量的值存储在内存用户区的静态存储区,其生存期为整个程序的运行期。,int A=0; void fun1() A=A+1; int main() fun1(); fun1(); return 0; ,八、变量的可见性,在变量的作用域内可以引用此变量,称为变量的可见性。同名变量的作用域依据就近原则界定。,int A; void fun1() A=A+1; int A; A=A+1; int main() A=A+1; return 0; ,九、 变量的作用域与生存期的关系,1、作用域与生存期一致情况,一般地,局部变量存储在动态存储区,全局变量存储在静态存储区,其各自的作用域与生存期是一致的。,九、 变量的作用域与生存期的关系,2、静态局部变量,静态局部变量存储在静态存储区,其作用域不变,但生存期变长,其生存期为整个程序的运行期。,void fun1() static int A=0; A=A+1; int main() fun1(); fun1(); return 0; ,九、 变量的作用域与生存期的关系,3、静态外部变量,将外部变量只限于被本文件引用,在定义外部变量时加一个static声明。,file1.c static int A; int main ( ) ,file2.c extern A; void fun (int n) A=A*n; ,十、 小结,