




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、2021/8/14李松绿李松绿延边科学技术大学- 第五章 变量的储存类型2021/8/142目录目录o 变量的储存类型变量的储存类型o 自动型变量自动型变量o 静态型变量静态型变量o 寄存器型变量寄存器型变量o 外部参照型变量外部参照型变量2021/8/1431. 变量的储存类型变量的储存类型o 可以存放数据的空间可以存放数据的空间n 计算机的寄存器n 内存o一般数据区o堆栈区o 储存类型储存类型n 用户可以通过定义变量的储存类型来选择变量的储存地点2021/8/1441. 变量的储存类型变量的储存类型o 变量的储存类型变量的储存类型YBUSTYBUST4分类分类储存地址储存地址生存期生存期适
2、用范围适用范围auto自动型stack内存堆栈区暂时性只适用于变量定义的域内static静态型一般内存数据区永久性只适用于变量定义的域内,但在域外仍能保存其变量值register寄存器型CPU的通用寄存器暂时性只适用于变量定义的域内extern外部参照型一般内存数据区永久性适用于程序的所有文件2021/8/145目录目录o 变量的储存类型变量的储存类型o 自动型变量自动型变量o 静态型变量静态型变量o 寄存器型变量寄存器型变量o 外部参照型变量外部参照型变量2021/8/1462. 自动型变量自动型变量o 自动型变量自动型变量(automatic variable) n 又称堆栈型,分配在内存
3、的堆栈区o 堆栈区stack领域o 储存方式- LIFO(last in first out)n 只适用于函数内部或函数的特定域内 o local variablen 工作原理o 执行:调用函数时,将在堆栈区给变量分配内存o 结束:结束函数时,收回分配给该变量的内存2021/8/1472. 自动型变量自动型变量o 堆栈区堆栈区(stack)的原理的原理 - PUSHYBUSTYBUST71020103020102030堆栈区领域PUSH 10PUSH 30PUSH 20102021/8/1482. 自动型变量自动型变量o 堆栈区堆栈区(stack)的原理的原理 - POPYBUSTYBUST8
4、201020POP 2030102030POP 3010POP 10102021/8/1492. 自动型变量自动型变量o形式形式n(auto) 数据类型 变量1, 变量2, ;n(auto) 数据类型 变量1=常数1, 变量2=常数2, ;o特征特征n定义在函数内部n执行完后,自动消失n定义自动型数组变量时,不能同时赋予初始值n没有给自动型变量赋予初始值的时候,无法确认其变量值o这样的状态叫 garbagen省略auto时,程序照样识别成自动型变量n利用自动型变量可以节省内存空间YBUSTYBUST92021/8/14102. 自动型变量自动型变量o 例例1YBUSTYBUST10main()
5、 auto int a, b; auto float c=3.1415; char d, e;定义自动型变量定义自动型变量赋予初始值赋予初始值省略省略auto也能被识别成自动型变量也能被识别成自动型变量跳出函数域跳出函数域( )时,变量会自动消失时,变量会自动消失2021/8/14112. 自动型变量自动型变量o 例例2YBUSTYBUST11main() auto int a10; float b5;定义整型数组定义整型数组 a0, a1, , a9定义省略定义省略auto的实型数组的实型数组 b0, b1, , b4定义自动型变量数组时,不能同时赋予初始值定义自动型变量数组时,不能同时赋予
6、初始值2021/8/1412o Program 5 .12. 自动型变量自动型变量#include main() int a=10; printf(“main-a=%d n“, a); sub(); printf(“main-a=%d n”, a);sub() int a=20; printf(“sub-a=%d n”, a);main-a=10sub-a=20main-a=102021/8/1413YBUSTYBUST13o Program 5 .22. 自动型变量自动型变量#include main() int a=35; if (a 10) int a=30; printf(“(1) a
7、=%d n”, a); printf(“(2) a=%d n”, a); a=30 a=352021/8/1414YBUSTYBUST14o Program 5 .32. 自动型变量自动型变量#include main() auto int a; auto int b; printf(“a=%dn”, a); printf(“b=%dn”, b);a=208b=02021/8/1415YBUSTYBUST15o Program 5 .42. 自动型变量自动型变量#include main() int a=10; int b=40; int a=20; int a=30; printf(“Blo
8、ck(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=102021/8/1416目录目录o 变量的储存类型变量的储存类型o 自动型变量自动型变量o 静态型变量静态型变量o 寄存器型变量寄存器型变量o 外部参照型变量外部参照型变量2021/8/14173. 静态型变量静态型变量o 静态型变量静态型变量(static variable)n分
9、配在内存的数据区中o外部静态型变量,内部静态型变量n工作原理o第一次调用函数时分配内存o调用结束时并不回收内存,而是继续保留其中的值o第二次调用函数时将不再分配内存o上次调用函数结束时保留的值可以继续使用o只有程序运行结束后,才释放所占用的内存n形式ostatic 数据类型 变量1, 变量2, ;2021/8/14183. 静态型变量静态型变量o 例例1 1YBUST18static int a=10, b=20;main() static float c, d, e;外部静态型变量外部静态型变量内部静态型变量内部静态型变量2021/8/14193. 静态型变量静态型变量o 例例2 2YBUS
10、T19static int a;main() sub() sub() static int b; 外部静态型变量外部静态型变量 内部静态型变量内部静态型变量2021/8/1420o Program 5.53. 静态型变量静态型变量#include main() static int a=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=Td n”, a);(1) a=11(2) a=12(3) a=132021/8/1421YBUSTYBUST21o Pr
11、ogram 5.63. 静态型变量静态型变量#include main() int c; printf(“ static var. auto var. n”); printf(“= n”); for(c=0; c3; c=c+1) sub();sub() static int a =20; auto int b=20; printf(“ a = %d b = %d n”, a, b); a = a+1; b = b+1;static var. auto var.= a = 20 b = 20 a = 21 b = 20 a = 22 b = 202021/8/1422YBUSTYBUST22o
12、 Program 5.73. 静态型变量静态型变量#include static int a=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 = 232021/8/1423YBUSTYBUST23o Program 5.83. 静态型变量静态型变量#include static in
13、t a;main() static int b; a = 30; b = 10; printf(“b=%d n”, b); sub();sub() a = a+5; printf(“a=%d n”, a);b=10a=352021/8/1424目录目录o 变量的储存类型变量的储存类型o 自动型变量自动型变量o 静态型变量静态型变量o 寄存器型变量寄存器型变量o 外部参照型变量外部参照型变量2021/8/14254. 寄存器型变量寄存器型变量o 寄存器型变量寄存器型变量(register variable)n 分配在CPU的通用寄存器中,便于高速运算n 数量及大小o由于CPU的通用寄存器数量有限
14、,一般最多定义13个o如果定义数目过多,则会自动将超出的变量设为自动型变量o不能定义占用字节数多的变量,如long, float, doubleo只允许int, char, short, 指针型变量n 内存的分配和回收o与自动型变量相同n 形式: register 数据类型 变量1, 变量2, ;2021/8/14264. 寄存器型变量寄存器型变量o 例例YBUSTYBUST26register int r1, r2;register r1, r2;register char a, b;register int *a;定义整型寄存器型变量定义整型寄存器型变量可以省略可以省略int定义字符型寄存
15、器型变量定义字符型寄存器型变量定义指针型定义指针型(pointer)寄存器型变量寄存器型变量2021/8/1427YBUSTYBUST27o Program 5.94. 寄存器型变量寄存器型变量#include void main() register int a, 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=502021/8/1428YBUSTYBUST28o Program 5.104. 寄存器型变量寄存器型变量#include
16、void main() register a, 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 = 152021/8/1429YBUSTYBUST29o Program 5.114. 寄存器型变量寄存器型变量void main() register int a = 10; register a = 20; register a = 30; printf(“a=%d n”, a); pr
17、intf(“a=%d n”, a); printf(“a=%d n”, a);a=30a=20a=102021/8/1430YBUSTYBUST30o Program 5.124. 寄存器型变量寄存器型变量#include void main() register a; int *p; p = &a; printf(“address a=%x n”, p);程序有错误,不程序有错误,不能执行程序能执行程序说明说明: register变量不变量不支持地址支持地址&运算运算2021/8/1431目录目录o 变量的储存类型变量的储存类型o 自动型变量自动型变量o 静态型变量静态型变量
18、o 寄存器型变量寄存器型变量o 外部参照型变量外部参照型变量2021/8/14325. 外部参照型变量外部参照型变量o 外部参照型变量外部参照型变量(external variable) n 工作原理和特征o必须先在函数外面定义变量,后用extern表明要参照此变量o一旦定义成外部参照型变量,可以在其他源程序文件参照此变量o变量中的值将保留到程序结束为止n形式: extern 数据类型 变量1, 变量2, ;2021/8/14335. 外部参照型变量外部参照型变量o 例例1YBUSTYBUST33int a=10;main() extern int a; printf(“a=%dn”, a);
19、定义外部参照型变量定义外部参照型变量参照变量参照变量2021/8/14345. 外部参照型变量外部参照型变量o 例例2YBUSTYBUST34int a=10main() int a=20; printf(“a=%dn”, a);定义外部参照型变量定义外部参照型变量自动型变量自动型变量 (auto variable)2021/8/1435YBUSTYBUST35o Program 5.135. 外部参照型变量外部参照型变量#include int i=100;void main() extern int i; printf(“i=%d n”, i); int i=200; printf(“i=%d n”, i); sub(); printf(“i=%d n”, i);sub() extern int i; i = i + 1;i=100i=200i=1012021/8/1436YBUSTYBUST36o Program 5.145. 外部参照型变量外部参照型变量#include int i=100;void main() printf(“i +
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 矿用照明与安全标识设备考核试卷
- 毛巾类制品的库存控制与仓储管理考核试卷
- 劳务派遣服务的客户关系优化策略制定与执行评估考核试卷
- 石膏在轻质隔墙板制造中的应用考核试卷
- 生态环境监测在环境教育中的重要性考核试卷
- 电视机修理操作流程考核试卷
- 碱金属与水的反应研究考核试卷
- 纺织机械的智能工厂运营管理策略优化考核试卷
- 天津医科大学临床医学院《舞蹈与健康》2023-2024学年第二学期期末试卷
- 吉林水利电力职业学院《清代宫廷文化史》2023-2024学年第二学期期末试卷
- 湖北省武汉市2025届高中毕业生四月调研考试语文试卷及答案(武汉四调)
- 2025-2030中国汽车金融行业市场深度调研及发展策略与投资前景研究报告
- 2025年铁路车辆钳工(高级)职业技能鉴定参考试题库(含答案)
- 跨越高原勇敢前行 课件 2025届高考学习的高原期主题班会
- 成人脑室外引流护理-中华护理学会团体 标准
- BS EN ISO 15848-1-2015 工业阀-逸散性排放的测量、试验和鉴定程序(中文)
- 英阿马岛战争
- 病媒生物防制PPT课件
- 人血白蛋白工艺规程(试行3)
- 邮政公司客户开发与维护
- 部编版小学五年级上册语文第18课《慈母情深》课文原文及教案
评论
0/150
提交评论