c语言中变量的存储区域和时效
来源:互联网 发布:mac怎么设置鼠标滚轮 编辑:程序博客网 时间:2024/09/21 08:48
参考:C程序设计,谭浩强
一,大分类(从存储空间)
1:局部变量
在一个{ }之内定义的变量,作用区域只限于这个符号范围之内,通常包含的{ }有一个函数,主函数子函数等等,while,for循环等等。(关于for循环括号中定义的变量,作用区域多大,好像是根据编译器不同而不同,最好只在本循环内使用。)
2:全局变量
定义在函数体外部的变量,作用范围为本文件(一个c语言文件,即是以“.c”结束的文件)变量定义的地方到此文件结束的区域。如果定义在文件末尾,那么上面就不能用啦。所以最好将一个文件的全局变量放在预编译文件之后的地方,省的编译问题。
二:变量的存储类别(变量的存在时间)
用户可以使用的区域依次为:1,程序区;2,静态存储区;3,动态存储区
静态存储区:固定的存储区域,主要存放
1:全局变量
2:使用static申明的局部变量(静态局部变量只在编译的时候赋初始值,默认为零,之后每次运行到此子函数使用的值是上次使用的时候计算的结果)
动态存储区:程序运行过程中动态分配的存储空间,主要存放
1:未声明或者使用auto声明的局部变量(因为局部变量默认就是auto型的,这里的变量就是每次调用就赋初始值,默认不确定)
2:函数的形式参数,其实也是子函数(被调用函数的局部变量,至少可以这样理解,都是出了这个函数就无效了)
3:函数调用的现场保护和返回地址(子函数调用的时候,会将父函数的一些变量暂时压入栈中进行保护)
寄存器存储区:在一个函数运行过程中,有些变量需要高频率使用而加的一种声明方式
但是它只能声明使用动态存储的局部变量(我觉得这是合理的,因为寄存器资源十分珍贵,不可能任由静态存储的一些变量总是霸占着,这是资源的浪费)
extern声明方式:适用于需要在其他文件中使用的全局变量,在本文件定义,在需要使用的其他文件声明即可使用。
但是这引入一个问题,有些全局变量并不想被其他文件使用,那么只需在本源文件定义出加上静态static声明即可。
三:关于声明和定义
程序有声明和执行两部分组成,声明根据是否分配存储空间分为两类
一类是分配存储空间的声明,俗称定义;
一类是不分配存储空间的声明,俗称声明。
例如:文件A中,定义全局变量int a;//这个语句执行的结果是在静态存储区给a分配了32bit,也就是4个字节的存储空间供它使用
文件B中,想要使用a,因此添加了语句 externa a;//此处的语句,不分配存储空间,仅仅是一个声明。
四:内部函数和外部函数
默认情况下,文件中定义的函数为外部函数,即其他文件的父函数想要使用此函数,只需要相应的声明之后就可以使用了
但是有些情况下,不希望函数被其他文件的函数调用,即使该父函数声明了也不能使用,这就需要在函数定义的时候加上static的声明标签。
五:个人小结:
关于上述基础知识就没有多说的必要了,仔细体会即可,这个时候我们主要将这些东西与c++做一些类比
在c++中关于声明有两个关键字:public,private;
对比此处的extern 和 static 似乎是很有一番相似之处,可以仔细体会,这里的一个文件做单元,换到c++中就是以一个class做单元。
具体的问题,由于本人目前c++只是浅陋,留待后文。
0 0
- c语言中变量的存储区域和时效
- C语言中变量的作用域、生命周期及存储区域
- C语言中变量的存储方式和生存期
- c语言中变量的存储位置
- C语言中变量的存储类型
- C语言中变量的存储类型
- C语言中变量的存储方式
- C语言中变量的存储类型
- C语言程序中不同的存储区域
- C语言程序的存储区域和编译过程
- C语言程序的存储区域和内存布局
- C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)
- C语言中局部变量和全局变量变量的存储类别(static,extern,auto,register)
- C语言存储区域
- C语言存储区域
- C语言中变量的存储类别及其存储方式
- C语言变量存储区域 进程内存布局
- C语言变量声明类型与存储区域探究
- 2015-01-23 记录我喜欢的文
- 技术需要耐心
- 继承至QObject的类使用QMetaObject不能找到相应方法(Q_INVOKABLE)
- ITOO---第一阶段小结
- 进程的基本操作
- c语言中变量的存储区域和时效
- Android视图状态及重绘流程分析,带你一步步深入了解View(二)
- linux中errno使用
- 百度和谷歌殊途同归
- Python3.x和Python2.x的区别
- [IOS] view的frame和bounds之区别(位置和大小)
- 怎样在VMware虚拟机中使用安装并设置Ubuntu系统
- 微信redirect_uri参数错误
- Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!