C语言中变量的存储方式和生存期
来源:互联网 发布:手机文件软件 编辑:程序博客网 时间:2024/05/19 14:55
在C语言的一个源文件中从变量的作用域的角度来观察,变量可分为全局变量和局部变量(外部变量)
1、局部变量分量种,一种是函数内部定义的变量,它只能在本函数内使用,此函数外不能使用。另一种是在函数的复合语句(如{}包含的程序块)中定义变量,它只能在本复合语句内使用,该复合语句外不能使用。
2、全局变量是在函数之外定义的变量。全局变量可以为本文件中函数所共用(用extern声明后也可被外部)。它的有效范围从定义位置开始到本源文件结束。全局变量在所有函数外定义,在函数内声明,函数内声明可以省略。
内存中供用户使用的存储空间可分为3部分
(1)程序区;
(2)静态存储区,存储全局变量(包括外部变量)和静态局部变量等。静态存储变量默认初值为0。
(3)动态存储区,存储函数形式参数、函数中定义的自动变量和函数调用是的现场保护和返回地址等。动态存储变量初始值不确定。
所以从内存变量值存储方式来观察,变量的存储方式有两种:静态存储方式和动态存储方式。静态存取区还分为栈(由系统分配释放)和堆(由程序员分配释放)除了存储在内存中,有些变量可以存储在CPU的寄存器中。
C语言的存储类别有4种:自动的(auto)、静态的(static)、寄存器的(register)和外部的(extern)。局部变量的存储类别有:
(1)、自动变量即动态局部变量(离开函数,变量消失),存储在内存动态存储区。函数中的函数如果不声明为static都指定为auto即自动变量。自动变量只在函数被调用时存在,离开函数时则消失。下次调用时分配的内存位置可能不同。
(2)、静态局部变量(离开函数,值仍保留),存储在内存静态存储区。函数调用结束时,其占用的存储单元不释放。下次在调用该函数时,该变量以有值。但因为其为局部变量,故不能被其他函数引用。
(3)、寄存器变量(离开函数,值就消失),存储在CPU中的寄存器。
形式参数可以定义为自动变量或寄存器变量。
全局变量都存储在内存静态存储区。因此他们存在于整个程序运行过程。但按可引用范围可分为
(1)静态外部变量(用static声明,只限本文件使用)
(2)外部变量(非静态的外部变量,允许其他文件通过extern引用)。
注意:
(1)在程序中如果局部变量和全局变量同名,全局变量被局部变量屏蔽。
(2)编译器遇到extern时,先在本文件中找外部变量的定义,如果找到就扩展作用域到本文件。如果找不到就在连接时从其他文件中找外部变量的定义,如果找到就扩展作用域到本文件。如果仍未找到,就按出错处理。
(3)多局部变量用static声明,把它分配在静态存储区。对全局变量用static声明,则限制改变量的作用域于本文件。
参考
【1】 谭浩强著. C程序设计(第四版). 北京:清华大学出版社,2010
- C语言中变量的存储方式和生存期
- C语言学习笔记:12_变量的存储方式和生存期
- 变量的存储方式和生存期
- C中变量的内存存储和生存期
- c中变量的存储区和生存期
- c中变量的存储区和生存期
- C语言之变量的存储方式和生存周期
- 变量的存储方式与生存期
- C语言的变量的作用域和生存期
- C语言的变量的作用域和生存期
- C语言的变量的作用域和生存期
- c 语言变量的全程生存期和动态生存期的体现
- C/C++中变量的生存期
- 变量的存储类别及生存期申明方式和作用域
- C语言中变量的存储方式
- 嵌入式学习10(C语言五大内存区间,变量的作用域和生存期,变量的存储类型)
- C语言中变量的生存期及作用域介绍
- C语言中变量的存储类别及其存储方式
- Python 文件重命名批量处理
- Bootstrap巨幕
- linux命令详解(ls命令)
- HDOJ 1269 迷宫城堡-(强连通分量)
- 面向对象
- C语言中变量的存储方式和生存期
- 刷leetCode记录贴
- 手机界面设计-2——电量显示界面
- Codeforces 101161 B Average
- mac安装mogondb
- java运算符
- 从零基础认识myBatis
- python学习笔记3:转义字符
- 《数据结构》实验二: 线性表综合实验——总结线性表的几种主要存储结果