数据存储预处理.ppt
静态类型变量*#includestdio.hintt(){inti=100;i+=5;returni;}voidmain(void){printf(i=%d\n,t());printf(i=%d\n,t());}例使用静态类型的局部变量#includestdio.hintt(){staticinti=100;i+=5;returni;}voidmain(void){printf(i=%d\n,t());printf(i=%d\n,t());}i=105i=110为了保存函数运行的结果,以便在下次调用该函数时,能继续使用上次计算的结果i=105i=105静态类型变量的初始化仅在程序开始运行时处理一次,执行完函数后,系统不收回变量存储空间。再次调用函数时,变量仍使用相同的存储空间,因此保留原来的值。#includestdio.hintfac(intn){ staticintf=1; f=f*n; return(f);}main(){ inti; for(i=1;i=5;i++) printf(%d!=%d\n,i,fac(i));}1!=12!=23!=64!=245!=120*#includestdio.hvoidmain(){intj;intmul(int);for(j=1;j=4;j++){ printf(%d\n,mul(j));}}intmul(intk){staticintl=0;l=l+1;return(k*l);}#includestdio.hvoidmain(){intj;intmul(int);for(j=1;j=4;j++){ printf(%d\n,mul(j));}}intmul(intk){staticintl;l=0;l=l+1;return(k*l);}例文件file1.cinta;main(){…….…….f2;…….f1;…….}f1(){autointb;………f2;……..}f2(){staticintc;………}C作用域b作用域a作用域mainf2f1mainf1f2maina生存期:b生存期:c生存期:从不同角度对存储类别的归纳1、从作用域角度分,有局部变量和全局变量,它们采用的存储类别是:局部变量自动变量,即动态局部变量(离开函数,值就消失)静态局部变量(离开函数,值仍保留)寄存器变量(离开函数,值就消失)(形式参数可以定义为自动变量或寄存器变量)全局变量静态外部变量(只限本文件使用)外部变量(即非静态外部变量,允许其它文件引用)2、从变量存在的时间来分,有动态存储和静态存储两种类型。静态存储是程序整个运行期间都存在,而动态存储则是在调用函数时临时分配存储单元。动态存储自动变量(本函数内有效)寄存器变量(本函数内有效)形式参数静态存储静态局部变量(函数内有效)外部变量(其它文件可引用)静态外部变量(本文件内有效)3、从变量值存放的位置来区分,可分为:1.内存中静态存储区静态局部变量(函数内有效)外部变量(其它文件可引用)静态外部变量(本文件内有效)2.内存中动态存储区:3.CPU中寄存器:自动变量和形式参数寄存器变量对局部变量来说,static使变量由动态存储方式改为静态存储方式。对全局变量来说,static使变量局部化(局部于本文件),但仍为静态存储方式。从作用域角度看,凡有static说明的,其作用域都是局限的,或者是局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)static对局部变量和全局变量的作用不同。2009秋等级考试试题#includestdio.hlongf(intn){ staticlongs; if(n==1)returns=2; elsereturn++