C语言中变量存储和作用域
来源:互联网 发布:java api安卓版 编辑:程序博客网 时间:2024/06/05 04:03
变量从作用域的角度可以分为局部变量和全局变量,而且有静态存储方式和动态存储方式。
根据存储方式可分为四种:auto, static, register, extern
auto
函数中的局部变量如果不声明为 static 都是动态分配存储空间,数据存储在动态存储区。函数中的形参和函数中定义的变量都是这种,在函数调用期间系统为他们分配空间,函数结束后自动释放存储空间。一般 auto 关键字省略不写。
static
static 声明的局部变量的值在函数调用结束后保留其值,占用的存储单元不会释放,在下次调用函数时可以接着使用其值。
(1)静态局部变量属于静态存储类别,在静态存储区分配空间,在程序整个运行期间都不会释放。
(2)静态局部变量在编译时赋初值,而自动变量在程序运行期间进行赋值。
(3)静态局部变量在函数结束时依然存在,但别的函数不能引用它,他的作用域只限于定义它的函数内。
(4)静态局部变量比较消耗内存,因为不会释放空间,当函数调用多次时,静态局部变量的值比较难确定,容易产生疑惑。
static声明外部变量(全局变量),这时这个全局变量只限于本文件中使用,不能被其他文件引用。(全局变量和静态全局变量都是使用静态存储方式,在编译时分配内存)
register
一般情况下,变量是存放在内存中的,但有时需要频繁使用某个变量,这时可以声明为 register 变量,寄存器变量放在CPU的寄存器中,能快速的读出变量的值,提高程序的执行效率。
(1)只能把局部自动变量或形参声明为寄存器变量。
(2)不能定义过多的寄存器变量,因为计算机中的寄存器是有限的,有的系统会把寄存器变量当做自动变量处理,有的只允许将 int char 变量定义为寄存器变量。
(3)局部静态变量不能定义为寄存器变量。
extern
extern用来声明外部变量(全局变量),以此来扩展外部变量的作用域。在一个文件中声明外部变量可以在声明之后的任意位置使用该变量,即使该变量定义在文件的后面。而在外面的文件声明外部变量可以使用别的文件中定义的外部变量,只要先声明该变量就行。系统在编译时遇到 extern 时会现在本文件内寻找外部变量的定义,如果找不到会在连接时从其他文件中查找外部变量的定义。如果最终找不到变量的定义就会按出错处理。
变量存储类别函数内作用域函数内存在性函数外作用域函数外存在性自动变量,寄存器变量有有无无静态局部变量有有无有全局变量有有有有静态外部变量有有有(仅限于本文件内)有- C语言中变量存储和作用域
- C语言中变量的作用域与存储类型
- C语言变量作用域、连接和存储时期
- C/C+++的中变量作用域和存储类型
- C语言中变量的作用域和生命…
- C语言中变量的作用域和生命周期
- C语言中变量的作用域和生命周期
- C语言中变量的生命周期和作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域 .
- C语言中变量作用域问题
- C语言中变量的作用域
- C语言中变量的作用域
- C语言中变量的作用域
- 自己写的一个图形验证码页面(Asp.Net2.0通过)
- Cocos2d-x之精灵帧SpriteFrame
- 用正则表达式过滤脚本的研究(ASP.net)
- hdu 2133 What day is it
- poj3252——Round Numbers(数位dp)
- C语言中变量存储和作用域
- ASP.NET2.0中配置文件的加密与解密
- 记一个SwipeMenuListView侧滑删除错乱的Bug
- mp4v2录制音视频同步方法
- Oracle、SQL Server、MySQL分页方法
- 弹出网页窗口全攻略(html/hta)
- 不使用composer安装yii高级版本的方法
- spark源码阅读笔记Dataset(三)structField、structType、schame
- 剑指Offer面试题35:第一个只出现一次的字符