C 语言的变量的作用域和生存期 一、c 程序存储空间布局 C 程序一直由下列部分组成: 1) 正文段——CPU 执行的机器指令部分;一个程序只有一个副本;只读,防止程序由于意外事故而修改自身指令; 2)初始化数据段(数据段)——在程序中所有赋了初值的全局变量,存放在这里
3)非初始化数据段(bss 段)——在程序中没有初始化的全局变量;内核将此段初始化为0
4)栈——增长方向:自顶向下增长;自动变量以及每次函数调用时所需要保存的信息(返回地址;环境信息)
5)堆——动态存储分
|-----------| | | |-----------| | 栈 | |-----------| | | | | /|/ | | | | | | /|/ | | | | |-----------| | 堆 | |-----------| | 未初始化 | |-----------| | 初始化 | |-----------| | 正文段 | |-----------| 二、 面向过程程序设计中的static 1
全局静态变量 在全局变量之前加上关键字static, 全局变量就被定义成为一个全局静态变量
1)内存中的位置:静态存储区(静态存储区在整个程序运行期间都存在) 2)初始化:未经初始化的全局静态变量会被程序自动初始化为0(自动对象的值是任意的,除非他被显示初始化) 3) 作用域:全局静态变量在声明他的文件之外是不可见的
准确地讲从定义之处开始到文件结尾
看下面关于作用域的程序: //teststatic1
c void display(); extern int n; int main() { n = 20; printf("%d/n",n); display(); return 0; } //teststatic2
c static int n; //定义全局静态变量,自动