《变量存储类型》PPT课件_第1页
《变量存储类型》PPT课件_第2页
《变量存储类型》PPT课件_第3页
《变量存储类型》PPT课件_第4页
《变量存储类型》PPT课件_第5页
已阅读5页,还剩34页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

CProgramming,李松绿延边科学技术大学,-第五章变量的储存类型,目录,变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量,YBUST,2,1.变量的储存类型,可以存放数据的空间计算机的寄存器内存一般数据区堆栈区储存类型用户可以通过定义变量的储存类型来选择变量的储存地点,YBUST,3,1.变量的储存类型,变量的储存类型,YBUST,4,目录,变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量,YBUST,5,2.自动型变量,自动型变量(automaticvariable)又称堆栈型,分配在内存的堆栈区堆栈区stack领域储存方式-LIFO(lastinfirstout)只适用于函数内部或函数的特定域内localvariable工作原理执行:调用函数时,将在堆栈区给变量分配内存结束:结束函数时,收回分配给该变量的内存,YBUST,6,2.自动型变量,堆栈区(stack)的原理-PUSH,YBUST,7,10,20,10,30,20,10,20,30,堆栈区领域,PUSH10,PUSH30,PUSH20,10,2.自动型变量,堆栈区(stack)的原理-POP,YBUST,8,20,10,20,POP20,30,10,20,30,POP30,10,POP10,10,2.自动型变量,形式(auto)数据类型变量1,变量2,;(auto)数据类型变量1=常数1,变量2=常数2,;特征定义在函数内部执行完后,自动消失定义自动型数组变量时,不能同时赋予初始值没有给自动型变量赋予初始值的时候,无法确认其变量值这样的状态叫garbage省略auto时,程序照样识别成自动型变量利用自动型变量可以节省内存空间,YBUST,9,2.自动型变量,例1,YBUST,10,2.自动型变量,例2,YBUST,11,YBUST,12,Program5.1,2.自动型变量,#includemain()inta=10;printf(“main-a=%dn“,a);sub();printf(“main-a=%dn”,a);sub()inta=20;printf(“sub-a=%dn”,a);,main-a=10sub-a=20main-a=10,YBUST,13,Program5.2,2.自动型变量,#includemain()inta=35;if(a10)inta=30;printf(“(1)a=%dn”,a);printf(“(2)a=%dn”,a);,a=30a=35,YBUST,14,Program5.3,2.自动型变量,#includemain()autointa;autointb;printf(“a=%dn”,a);printf(“b=%dn”,b);,a=208b=0,YBUST,15,Program5.4,2.自动型变量,#includemain()inta=10;intb=40;inta=20;inta=30;printf(“Block(3)a=%dn”,a);printf(“Block(1)b=%dn”,b);printf(“Block(2)a=%dn”,a);printf(“Block(1)a=%dn”,a);,Block(3)a=30Block(1)b=40Block(2)a=20Block(1)a=10,目录,变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量,YBUST,16,3.静态型变量,静态型变量(staticvariable)分配在内存的数据区中外部静态型变量,内部静态型变量工作原理第一次调用函数时分配内存调用结束时并不回收内存,而是继续保留其中的值第二次调用函数时将不再分配内存上次调用函数结束时保留的值可以继续使用只有程序运行结束后,才释放所占用的内存形式static数据类型变量1,变量2,;,YBUST,17,3.静态型变量,例1,YBUST,18,3.静态型变量,例2,YBUST,19,YBUST,20,Program5.5,3.静态型变量,#includemain()staticinta=10;a=a+1;printf(“(1)a=%dn”,a);a=a+1;printf(“(2)a=%dn”,a);a=a+1;printf(“(3)a=Tdn”,a);,(1)a=11(2)a=12(3)a=13,YBUST,21,Program5.6,3.静态型变量,#includemain()intc;printf(“staticvar.autovar.n”);printf(“=n”);for(c=0;c3;c=c+1)sub();sub()staticinta=20;autointb=20;printf(“a=%db=%dn”,a,b);a=a+1;b=b+1;,staticvar.autovar.=a=20b=20a=21b=20a=22b=20,YBUST,22,Program5.7,3.静态型变量,#includestaticinta=20;sub1()a=a+1;printf(“sub(1)a=%dn”,a);sub2()a=a+1;printf(“sub(2)a=%dn”,a);main()a=a+1;printf(“main()a=%dn”,a);sub1();sub2();,main()a=21sub(1)a=22sub(2)a=23,YBUST,23,Program5.8,3.静态型变量,#includestaticinta;main()staticintb;a=30;b=10;printf(“b=%dn”,b);sub();sub()a=a+5;printf(“a=%dn”,a);,b=10a=35,目录,变量的储存类型自动型变量静态型变量寄存器型变量外部参照型变量,YBUST,24,4.寄存器型变量,寄存器型变量(registervariable)分配在CPU的通用寄存器中,便于高速运算数量及大小由于CPU的通用寄存器数量有限,一般最多定义13个如果定义数目过多,则会自动将超出的变量设为自动型变量不能定义占用字节数多的变量,如long,float,double只允许int,char,short,指针型变量内存的分配和回收与自动型变量相同形式:register数据类型变量1,变量2,;,YBUST,25,4.寄存器型变量,例,YBUST,26,YBUST,27,Program5.9,4.寄存器型变量,#includevoidmain()registerinta,b,c;a=20;b=30;c=a+b;printf(“a=%dn”,a);printf(“b=%dn”,b);printf(“c=%dn”,c);,a=20b=30c=50,YBUST,28,Program5.10,4.寄存器型变量,#includevoidmain()registera,b;for(a=1;a=5;a+)for(b=1;b=5;b+)if(a=3)printf(“%d*%d=%dn”,a,b,a*b);,3*1=33*2=63*3=93*4=123*5=15,YBUST,29,Program5.11,4.寄存器型变量,voidmain()registerinta=10;registera=20;registera=30;printf(“a=%dn”,a);printf(“a=%dn”,a);printf(“a=%dn”,a);,a=30a=20a=10,YBUST,30,Program5.12,4.寄存器型变量,#includevoidmain()registera;int*p;p=,程序有错误,不能执行程序说明:register变量不支持地址,YBUST,32,5.外部参照型变量,例1,YBUST,33,5.外部参照型变量,例2,YBUST,34,YBUST,35,Program5.13,5.外部参照型变量,#includeinti=100;voidmain()externinti;printf(“i=%dn”,i);inti=200;printf(“i=%dn”,i);sub();printf(“i=%dn”,i);sub()externinti;i=i+1;,i=100i=200i=101,YBUST,36,Program5.14,5.外部参照型变量,#includeinti=100;voidmain()printf(“i+b=%dn”,i+b);intb=200;,错误:变量b在没有事先定义的情况下被使用。Undefinedvariable,YBUST,37,Program5.15,5.外部参照型变量,#includeintx=150;inty=300;voidmain()printf(“x+y=%dn”,x+y);,x+y=450,YBUST,38,Program5.16,5.外部参照型变量,#includeinta=100;voidmain()externa;externb;printf(“a+b=%dn”,a+b);intb=200;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论