写在前面:已经看过一遍,现在看第二遍,只记想记的
目录
第1章 概述
第2章 算法
第3章 数据类型、运算符与表达式
第4章 顺序程序设计
第5章 选择结构程序设计
第6章 循环控制
第7章 数组
第8章 函数
8.9 变量的存储类别
变量分类:
1、从变量的作用域(空间角度):全局变量与局部变量
2、变量值的存在时间(生存期):静态存储方式与动态存储方式
- 静态存储方式:程序在运行期间由系统分配固定的存储空间的方式
- 动态存储方式:在程序运行期间根据需要进行动态分配存储空间的方式
内存中供用户使用的存储空间分为:
- 程序区:
- 静态存储区:部分数据,全部的全局变量
- 动态存储区:存放部分数据,如函数形参、未加static声明的局部变量(自动变量)、函数调用时的现场保护和返回地址
存储类别:分为两大类:静态/动态存储类,具体包含4种(关键字声明方式):自动的(auto)、静态的(static)、寄存器的(register)、外部的(extern)
- 自动的(auto):未声明static存储类别的局部变量,如函数形参、函数中定义变量,存储在动态存储区中。
- 静态的(static):用static声明的局部变量在函数调用结束后保留原值,其占用的存储单元在函数结束后不释放,在下一次函数调用时使用上一次调用结束时的值
(1)静态局部变量属于静态存储类别,存储在静态存储区
(2)在编译时赋初值,若未赋初值则编译时自动赋初值0或空字符
(3)只有声明该静态局部变量的函数能使用该变量,其余函数不能对该变量进行操作 - 寄存器的(register):为提高执行效率,将频繁使用的变量放在CPU中的寄存器中,需要时直接从寄存器中取出参与运算不用到内存中去存取。
(1)只有局部自动变量和形式参数可作为寄存器变量
(2)系统中寄存器数量有限,每个操作系统对寄存器变量的定义操作各不相同
(3)一般不用,了解即可 - 外部的(extern):在函数外部定义的全局变量,作用域:从变量定义到本程序文件末尾,存储在静态存储区,用于扩展外部变量的作用域
(1)在一个文件内声明外部变量,扩展它在程序文件中的作用域
(2)在多文件程序中声明外部变量,如一个文件file1定义变量A,其他文件可声明extern A来使用file1中的变量A
(3)若在程序设计中希望某些外部变量只限于被本文件使用,而不被其他文件使用,可在定义外部变量时加一个static声明,如file1中定义变量A为"static int A",则其他文件在声明extern A时无法使用file1中的变量A
(4)外部变量均为静态存储方式
【注意】用auto、register、static声明变量时,是在定义变量的基础上加上这些关键字,不能单独使用,如:
- static int a;(√)
- int a; static a;(×)