作用域
c语言变量的作用域分为:
- 代码块作用域(代码块是{}之间的一段代码)
- 函数作用域
- 文件作用域
变量的作用范围
变量的作用范围:从创建到所在函数结束
局部变量
- 局部变量也叫auto自动变量,一般情况下代码块{}内定义的变量都是自动变量。
- 在一个函数内定义,只在函数范围内有效
- 在复合语句中定义,只在复合语句中有效
- 随着函数调用的结束或复合语句的结束,局部变量的声明、生命周期也结束
- 如果没用赋初始值,内容为随机
全局变量
- 在函数外部定义
- 全局变量作用整个项目中
- 使用的前提是需要在使用的文件中进行声明
- 全局变量名称不能重复
静态局部变量
- static局部变量的作用域也是在定义的函数内有效
- static局部变量的生命周期和程序运行周期一样,同时static局部变量值只初始化一次,但可以多次赋值
- static局部变量若未赋以初值,则由系统自动赋值:数值型变量自动赋值0;字符型变量赋值空字符
静态全局变量
- 在函数外定义,作用范围被限制在所定义的文件中
- 不同文件静态全局变量可以重名,但作用域不冲突
- static全局变量的生命周期和程序运行周期一样,同时static全局变量的值只初始化一次
extern全局变量声明
extern int a;声明一个变量,这个变量在别的文件中已经定义了,这里只是声明,而不是定义
全局函数和静态函数
在c语言中函数默认都是全局的,使用关键字static可以将函数声明为静态函数,函数定义为static就意味着这个函数只能在定义这个函数的文件中使用,在其他文件中不能调用,即使在其它文件中声明这个函数都没用
对于不同文件中的static函数名字可以相同
代码区
程序指令,存放函数体的二进制代码。
数据区:(静态区 全局区)
初始化的数据
1、初始化的全局变量
2、初始化的静态全局变量
3、初始化的静态局部变量
未初始化的数据
1、未初始化的静态局部变量
2、未初始化的全局变量
3、未初始化的静态全局变量
字符串常量
栈区
由编译器自动分配释放,存放函数的参数值,局部变量的值等。其
操作方式类似于数据结构中的栈。
栈区大小:
在不同的操作系统中系统分配给每一个系统的栈区空间大小不同,一般windows 是1-8m不等,一般linux是1-16m不等
非静态局部变量
数组
结构体
指针
枚举
函数形参
常量
堆区
- 音频文件
- 视频文件
- 图像文件
- 文本文件
大的数据