变量存储类型
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
形式 static 数据类型 变量1, 变量2, …;
A
17
3. 静态型变量
例1
static int a=10,
b=20;
外部静态型变量
main() {
static float c, d, e; 内部静态型变量
}
YBAUST
18
3. 静态型变量
例2
static int a; main() {
Leabharlann Baidu
float b[5]; }
定义省略auto的实型数组 b[0], b[1], …, b[4] 定义自动型变量数组时,不能同时赋予初始值
YBAUST
11
2. 自动型变量
Program 5 .1
#include <stdio.h> main() {
main-a=10 sub-a=20
int a=10;
int b=40;
Block(1) b=40
{
Block(2) a=20
int a=20;
Block(1) a=10
{
int a=30;
printf(“Block(3) a=%d \n”, a);
printf(“Block(1) b=%d \n”, b);
}
printf(“Block(2) a=%d \n”, a);
适用于程序的所有文件
YBAUST
4
目录
变量的储存类型 自动型变量 静态型变量 寄存器型变量 外部参照型变量
A
5
2. 自动型变量
自动型变量(automatic variable)
又称堆栈型,分配在内存的堆栈区
堆栈区—stack领域 储存方式-- LIFO(last in first out)
auto int a; auto int b; printf(“a=%d\n”, a); printf(“b=%d\n”, b); }
YBAUST
a=208 b=0
14
2. 自动型变量
Program 5 .4
#include <stdio.h>
main() {
int a=10;
Block(3) a=30
a = a+1; printf(“(2) a=%d \n”, a); } a = a+1; printf(“(3) a=Td \n”, a); }
30 20 10
YBAUST
7
2. 自动型变量
堆栈区(stack)的原理 -- POP
30 POP 30
30 20 10
20 POP 20
20 10
10 POP 10
10
YBAUST
8
2. 自动型变量
形式 (auto) 数据类型 变量1, 变量2, …; (auto) 数据类型 变量1=常数1, 变量2=常数2, …;
A
3
1. 变量的储存类型
变量的储存类型
分类
auto 自动型
static 静态型
register 寄存器型
extern 外部参照型
储存地址 stack
内存堆栈区
一般内存数据区
CPU的 通用寄存器
一般内存数据区
生存期 暂时性 永久性 暂时性 永久性
适用范围 只适用于变量定义的域内 只适用于变量定义的域内, 但在域外仍能保存其变量值 只适用于变量定义的域内
… sub()
… } sub() {
static int b; …
}
外部静态型变量 内部静态型变量
YBAUST
19
3. 静态型变量
Program 5.5
#include <stdio.h> main() {
static int a=10; a = a+1; printf(“(1) a=%d \n”, a); {
auto int a, b;
定义自动型变量
auto float c=3.1415; char d, e; }
赋予初始值 省略auto也能被识别成自动型变量 跳出函数域({ })时,变量会自动消失
YBAUST
10
2. 自动型变量
例2
main() {
auto int a[10]; 定义整型数组 a[0], a[1], …, a[9]
main-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);
}
A
12
2. 自动型变量
Program 5 .2
#include <stdio.h> main() {
C Programming
-- 第五章 变量的储存类型
李松绿
延边科学技术大学
A
目录
变量的储存类型 自动型变量 静态型变量 寄存器型变量 外部参照型变量
A
2
1. 变量的储存类型
可以存放数据的空间
计算机的寄存器 内存
一般数据区 堆栈区
储存类型
用户可以通过定义变量的储存类型来选择变量 的储存地点
特征 定义在函数内部 执行完后,自动消失 定义自动型数组变量时,不能同时赋予初始值 没有给自动型变量赋予初始值的时候,无法确认其变量值
这样的状态叫 garbage
省略‘auto’时,程序照样识别成自动型变量 利用自动型变量可以节省内存空间
YBAUST
9
2. 自动型变量
例1
main() {
int a=35; if (a > 10) {
int a=30; printf(“(1) a=%d \n”, a); } printf(“(2) a=%d \n”, a); }
(1)a=30 (2)a=35
YBAUST
13
2. 自动型变量
Program 5 .3
#include <stdio.h> main() {
}
printf(“Block(1) a=%d \n”, a);
}
YBAUST
15
目录
变量的储存类型 自动型变量 静态型变量 寄存器型变量 外部参照型变量
A
16
3. 静态型变量
静态型变量(static variable)
分配在内存的数据区中 外部静态型变量,内部静态型变量
工作原理 第一次调用函数时分配内存 调用结束时并不回收内存,而是继续保留其中的值 第二次调用函数时将不再分配内存 上次调用函数结束时保留的值可以继续使用 只有程序运行结束后,才释放所占用的内存
只适用于函数内部或函数的特定域内
local variable
工作原理
执行:调用函数时,将在堆栈区给变量分配内存 结束:结束函数时,收回分配给该变量的内存
A
6
2. 自动型变量
堆栈区(stack)的原理 -- PUSH
10 PUSH 10
10
堆栈区 领域
20 PUSH 20
20 10
30 PUSH 30
A
17
3. 静态型变量
例1
static int a=10,
b=20;
外部静态型变量
main() {
static float c, d, e; 内部静态型变量
}
YBAUST
18
3. 静态型变量
例2
static int a; main() {
Leabharlann Baidu
float b[5]; }
定义省略auto的实型数组 b[0], b[1], …, b[4] 定义自动型变量数组时,不能同时赋予初始值
YBAUST
11
2. 自动型变量
Program 5 .1
#include <stdio.h> main() {
main-a=10 sub-a=20
int a=10;
int b=40;
Block(1) b=40
{
Block(2) a=20
int a=20;
Block(1) a=10
{
int a=30;
printf(“Block(3) a=%d \n”, a);
printf(“Block(1) b=%d \n”, b);
}
printf(“Block(2) a=%d \n”, a);
适用于程序的所有文件
YBAUST
4
目录
变量的储存类型 自动型变量 静态型变量 寄存器型变量 外部参照型变量
A
5
2. 自动型变量
自动型变量(automatic variable)
又称堆栈型,分配在内存的堆栈区
堆栈区—stack领域 储存方式-- LIFO(last in first out)
auto int a; auto int b; printf(“a=%d\n”, a); printf(“b=%d\n”, b); }
YBAUST
a=208 b=0
14
2. 自动型变量
Program 5 .4
#include <stdio.h>
main() {
int a=10;
Block(3) a=30
a = a+1; printf(“(2) a=%d \n”, a); } a = a+1; printf(“(3) a=Td \n”, a); }
30 20 10
YBAUST
7
2. 自动型变量
堆栈区(stack)的原理 -- POP
30 POP 30
30 20 10
20 POP 20
20 10
10 POP 10
10
YBAUST
8
2. 自动型变量
形式 (auto) 数据类型 变量1, 变量2, …; (auto) 数据类型 变量1=常数1, 变量2=常数2, …;
A
3
1. 变量的储存类型
变量的储存类型
分类
auto 自动型
static 静态型
register 寄存器型
extern 外部参照型
储存地址 stack
内存堆栈区
一般内存数据区
CPU的 通用寄存器
一般内存数据区
生存期 暂时性 永久性 暂时性 永久性
适用范围 只适用于变量定义的域内 只适用于变量定义的域内, 但在域外仍能保存其变量值 只适用于变量定义的域内
… sub()
… } sub() {
static int b; …
}
外部静态型变量 内部静态型变量
YBAUST
19
3. 静态型变量
Program 5.5
#include <stdio.h> main() {
static int a=10; a = a+1; printf(“(1) a=%d \n”, a); {
auto int a, b;
定义自动型变量
auto float c=3.1415; char d, e; }
赋予初始值 省略auto也能被识别成自动型变量 跳出函数域({ })时,变量会自动消失
YBAUST
10
2. 自动型变量
例2
main() {
auto int a[10]; 定义整型数组 a[0], a[1], …, a[9]
main-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);
}
A
12
2. 自动型变量
Program 5 .2
#include <stdio.h> main() {
C Programming
-- 第五章 变量的储存类型
李松绿
延边科学技术大学
A
目录
变量的储存类型 自动型变量 静态型变量 寄存器型变量 外部参照型变量
A
2
1. 变量的储存类型
可以存放数据的空间
计算机的寄存器 内存
一般数据区 堆栈区
储存类型
用户可以通过定义变量的储存类型来选择变量 的储存地点
特征 定义在函数内部 执行完后,自动消失 定义自动型数组变量时,不能同时赋予初始值 没有给自动型变量赋予初始值的时候,无法确认其变量值
这样的状态叫 garbage
省略‘auto’时,程序照样识别成自动型变量 利用自动型变量可以节省内存空间
YBAUST
9
2. 自动型变量
例1
main() {
int a=35; if (a > 10) {
int a=30; printf(“(1) a=%d \n”, a); } printf(“(2) a=%d \n”, a); }
(1)a=30 (2)a=35
YBAUST
13
2. 自动型变量
Program 5 .3
#include <stdio.h> main() {
}
printf(“Block(1) a=%d \n”, a);
}
YBAUST
15
目录
变量的储存类型 自动型变量 静态型变量 寄存器型变量 外部参照型变量
A
16
3. 静态型变量
静态型变量(static variable)
分配在内存的数据区中 外部静态型变量,内部静态型变量
工作原理 第一次调用函数时分配内存 调用结束时并不回收内存,而是继续保留其中的值 第二次调用函数时将不再分配内存 上次调用函数结束时保留的值可以继续使用 只有程序运行结束后,才释放所占用的内存
只适用于函数内部或函数的特定域内
local variable
工作原理
执行:调用函数时,将在堆栈区给变量分配内存 结束:结束函数时,收回分配给该变量的内存
A
6
2. 自动型变量
堆栈区(stack)的原理 -- PUSH
10 PUSH 10
10
堆栈区 领域
20 PUSH 20
20 10
30 PUSH 30