目录
2.储存类别又可以按照作用域和生存周期分为局部变量和全局变量,静态变量和动态变量
优点:一个函数将值放入全局变量,其他函数都可以使用,增加了函数之间的联系
1.一般全局变量(程序级)(可以通过extern拓展到别的源文件中使用)
2.静态全局变量(static限制全局变量只可以在本源文件中使用)
1.变量有两个属性,一个是数据类型,一个是储存类别
2.储存类别又可以按照作用域和生存周期分为局部变量和全局变量,静态变量和动态变量
3.作用域
1.局部变量
定义:在函数内部定义的变量
作用域:他只能在定义他的大括号内使用,不能渗透到大括号外
- 注:
- 在函数体开头定义的,在本函数内有效
- 在复合语句中定义的。则只在复合语句中有效
- 函数参数和函数开头定义的变量作用域相同
- 不同函数中定义的局部变量可以同名,但不是同一个变量,在内存中也占据不同的单元
- 形参也是局部变量
2.全局变量
定义:在函数外部定义的变量叫做全局变量,也叫外部变量
作用域:从定义到源文件结束
优点:一个函数将值放入全局变量,其他函数都可以使用,增加了函数之间的联系
缺点:
- 占用内存时间长
函数之间相互影响,增加了函数之间的耦合性
注:
- 全局变量的作用域可以拓展(通过 extern在本源文件中向前拓展,通过extern向另一个源文件拓展,通过加上static不让其他的源文件使用)
- 提供了一个公共场所,便于函数之间的交换数据(比如主调函数需要被调函数提供两个以上的返回值,函数只有一个返回值)
4.生存周期
1.内存区域的划分
1.代码区:存储函数的名字
2.静态存储区(零区,非零区):全局变量,局部静态变量
3.动态存储区(堆区,栈区):局部变量,函数形参,临时变量
2.局部变量
1.局部自动变量
局部自动变量可以放在内存中,也可以放在寄存器中,放在寄存其中,就叫做寄存器变量
特点:
- 动态存储(定义的时候不开辟空间,调用的时候才开辟空间,用完就释放,若再用,需要重新开辟)
- 引用次数=赋初值次数=开辟空间次数(如果定义的时候给了初值,每次开辟空间都要存入初值)
- 定义时无初值则初值不确定
2.局部静态变量(static)
特点:
- 静态存储(程序装载的时候开辟空间,用完也不释放,整个程序结束的时候释放(只开辟一次,也只释放一次)
- 保留数据(第一次函数留下的数据,第二次可以继续使用)
- 若有初值,那就是唯一一次(如果定义的时候赋了初值,开辟空间的时候存入初值,且仅此一次)
- 如果定义的时候无初值,自动赋值为0
- 变量作用域只是在他的花括号内部
3.寄存器变量(register)
特点:
- 变量的值存在系统分配的寄存器中,减少变量存取的时间开销
- 只有局部自动变量和形参可以定义为寄存器变量
- 寄存器变量数目不能太多,非必要一般不用
- 微机上,一般把寄存器变量当做自动变量处理
3.全局变量
特点:
- 存储类别:都是静态存储,程序运行之前开辟空间,结束后释放空间
- 初值:如果不赋初值,初值为0
1.一般全局变量(程序级)(可以通过extern拓展到别的源文件中使用)
- 可以通过extern将作用域在文件内先前拓展
- 通过extern还可以将作用域拓展到其他文件