变量的储存类型

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

电算概论II崔锦花延边科学技术大学--第五章变量的储存类型2008-06-04目录变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量YBUST21.变量的储存类型可以存放数据的空间计算机的寄存器内存一般数据区堆栈区储存类型用户可以通过定义变量的储存类型来选择变量的储存地点YBUST31.变量的储存类型变量的储存类型YBUST4分类储存地址生存期适用范围auto自动型stack内存堆栈区暂时性只适用于变量定义的域内static静态型一般内存数据区永久性只适用于变量定义的域内,但在域外仍能保存其变量值register寄存器型CPU的通用寄存器暂时性只适用于变量定义的域内extern外部参照型一般内存数据区永久性适用于程序的所有文件目录变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量YBUST52.自动型变量自动型变量(automaticvariable)又称堆栈型,分配在内存的堆栈区堆栈区—stack领域储存方式--LIFO(lastinfirstout)只适用于函数内部或函数的特定域内localvariable工作原理执行:调用函数时,将在堆栈区给变量分配内存结束:结束函数时,收回分配给该变量的内存YBUST62.自动型变量堆栈区(stack)的原理--PUSHYBUST71020103020102030堆栈区领域PUSH10PUSH30PUSH20102.自动型变量堆栈区(stack)的原理--POPYBUST8201020POP2030102030POP3010POP10102.自动型变量形式(auto)数据类型变量1,变量2,…;(auto)数据类型变量1=常数1,变量2=常数2,…;特征定义在函数内部执行完后,自动消失定义自动型数组变量时,不能同时赋予初始值没有给自动型变量赋予初始值的时候,无法确认其变量值这样的状态叫garbage省略‘auto’时,程序照样识别成自动型变量利用自动型变量可以节省内存空间YBUST92.自动型变量例1YBUST10main(){autointa,b;autofloatc=3.1415;chard,e;}定义自动型变量赋予初始值省略auto也能被识别成自动型变量跳出函数域({})时,变量会自动消失2.自动型变量例2YBUST11main(){autointa[10];floatb[5];}定义整型数组a[0],a[1],…,a[9]定义省略auto的实型数组b[0],b[1],…,b[4]定义自动型变量数组时,不能同时赋予初始值YBUST12Program5.1SourceCodeResult2.自动型变量#includestdio.hmain(){inta=10;printf(“main-a=%d\n“,a);sub();printf(“main-a=%d\n”,a);}sub(){inta=20;printf(“sub-a=%d\n”,a);}main-a=10sub-a=20main-a=10YBUST13Program5.2SourceCodeResult2.自动型变量#includestdio.hmain(){inta=35;if(a10){inta=30;printf(“(1)a=%d\n”,a);}printf(“(2)a=%d\n”,a);}(1)a=30(2)a=35YBUST14Program5.4SourceCodeResult2.自动型变量#includestdio.hmain(){inta=10;intb=40;{inta=20;{inta=30;printf(“Block(3)a=%d\n”,a);printf(“Block(1)b=%d\n”,b);}printf(“Block(2)a=%d\n”,a);}printf(“Block(1)a=%d\n”,a);}Block(3)a=30Block(1)b=40Block(2)a=20Block(1)a=10目录变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量YBUST153.静态型变量静态型变量(staticvariable)分配在内存的数据区中外部静态型变量,内部静态型变量工作原理第一次调用函数时分配内存调用结束时并不回收内存,而是继续保留其中的值第二次调用函数时将不再分配内存上次调用函数结束时保留的值可以继续使用只有程序运行结束后,才释放所占用的内存形式static数据类型变量1,变量2,…;YBUST163.静态型变量例1YBUST17staticinta=10,b=20;main(){staticfloatc,d,e;}外部静态型变量内部静态型变量3.静态型变量例2YBUST18staticinta;main(){…sub()…}sub(){staticintb;…}外部静态型变量内部静态型变量YBUST19Program5.5SourceCodeResult3.静态型变量#includestdio.hmain(){staticinta=10;a=a+1;printf(“(1)a=%d\n”,a);{a=a+1;printf(“(2)a=%d\n”,a);}a=a+1;printf(“(3)a=%d\n”,a);}(1)a=11(2)a=12(3)a=13YBUST20Program5.6SourceCodeResult3.静态型变量#includestdio.hmain(){intc;printf(“staticvar.autovar.\n”);printf(“===============\n”);for(c=0;c3;c=c+1)sub();}sub(){staticinta=20;autointb=20;printf(“a=%db=%d\n”,a,b);a=a+1;b=b+1;}staticvar.autovar.=================a=20b=20a=21b=20a=22b=20YBUST21Program5.7SourceCodeResult3.静态型变量#includestdio.hstaticinta=20;sub1(){a=a+1;printf(“sub(1)a=%d\n”,a);}sub2(){a=a+1;printf(“sub(2)a=%d\n”,a);}main(){a=a+1;printf(“main()a=%d\n”,a);sub1();sub2();}main()a=21sub(1)a=22sub(2)a=23YBUST22Program5.8SourceCodeResult3.静态型变量#includestdio.hstaticinta;main(){staticintb;a=30;b=10;printf(“b=%d\n”,b);sub();}sub(){a=a+5;printf(“a=%d\n”,a);}b=10a=35目录变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量YBUST234.寄存器型变量寄存器型变量(registervariable)分配在CPU的通用寄存器中,便于高速运算数量及大小由于CPU的通用寄存器数量有限,一般最多定义1~3个如果定义数目过多,则会自动将超出的变量设为自动型变量不能定义占用字节数多的变量,如long,float,double只允许int,char,short,指针型变量内存的分配和回收与自动型变量相同形式:register数据类型变量1,变量2,…;YBUST244.寄存器型变量例YBUST25registerintr1,r2;registerr1,r2;registerchara,b;registerint*a;定义整型寄存器型变量可以省略int定义字符型寄存器型变量定义指针型(pointer)寄存器型变量YBUST26Program5.9SourceCodeResult4.寄存器型变量#includestdio.hvoidmain(){registerinta,b,c;a=20;b=30;c=a+b;printf(“a=%d\n”,a);printf(“b=%d\n”,b);printf(“c=%d\n”,c);}a=20b=30c=50YBUST27Program5.10SourceCodeResult4.寄存器型变量#includestdio.hvoidmain(){registera,b;for(a=1;a=5;a++){for(b=1;b=5;b++){if(a==3)printf(“%d*%d=%d\n”,a,b,a*b);}}}3*1=33*2=63*3=93*4=123*5=15YBUST28Program5.11SourceCodeResult4.寄存器型变量#includestdio.hvoidmain(){registerinta=10;{registera=20;{registera=30;printf(“a=%d\n”,a);}printf(“a=%d\n”,a);}printf(“a=%d\n”,a);}a=30a=20a=10YBUST29Program5.12SourceCodeResult4.寄存器型变量#includestdio.hvoidmain(){registera;int*p;p=&a;printf(“addressa=%x\n”,p);}程序有错误,不能执行程序说明:register变量不支持地址&运算目录变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量YBUST305.外部参照型变量外部参照型变量(externalvariable)工作原理和特征必须先在函数外面定义变量,后用extern表明要参照此变量一旦定义成外部参照型变量,可以在其他源程序文件参照此变量变量中的值将保留到程序结束为止形式:extern数据类型变量1,变量2,…;YBUST315.外部参照型变量例1YBUST32inta=10;main(){externinta;printf(“a=%d\n”,a);}定义外部参照型变量参照变量5.外部参照型变量例2YBUST33inta=10main(){inta=20;printf(“a=%d\n”,a);}定义外部参照型变量自动型变量(autovariable)YBUST34Program5.13SourceCodeResult5.外部参照型变量#includestdio.hinti=100;voidmain(){externinti;printf(“i=%d\n”,i);{inti=200;printf(“i=%d\n”,i);}sub();printf(“i=%d\n”,i);}sub(){externinti;i=i+1;}i=100i=200i=101YBUST35Program5.14SourceCodeResult5.外部参照型变量#includestdio.hinti=100;voidmain(){printf(“i+b=%d\n”,i+b);}intb=200;undefine이라는에러메시지를나타낸다YBUST36Program5.15SourceCodeResult5.外部参照型变量#includestdio.hintx=150;inty=300;voidmain(){printf(“x+y=%d\n”,x+y);}x+y=450YBUST37Program5.16SourceCodeResult5.外部参照型变量#includestdio.hinta=100;voidmain(){externa;ext

1 / 38
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功