C语言的变量具有区间性的作用域。在开发一些小程序的时候也许我们并不在意作用域的必要性。可是,当你书写几万行,甚至几十万行的代码的时候,没有作用域肯定是不能忍受的。C语言有如下三种作用域。
1. 全局变量
在函数之外声明的变量,默认地会成为全局变量。全局变量在任何地方都是可见的。当程序被分割为多个源代码文件进行编译时,声明为全局变量的变量也是可以通过关键字extern从其他源代码文件中引用的。
2. 文件内部的静态变量
就算对于像全局变量那样呗定义在函数外面的变量,一旦添加了static,作用域就只限定在当前的源代码文件中。通过static指定的变量(包括函数),对于其他源代码文件是不可见的。
3. 局部变量
局部变量是指在函数中声明的变量。局部变量只能在包含它的声明的语句块(使用{ }括起来的范围)中被引用。
局部变量通常在函数的开头部分进行声明,但也可以子啊函数内部某语句块的开头进行声明。例如,在“变换两个变量的内容时,需要使用一下临时变量”的情况下,将局部变量声明放在当前语句块开头还是比较方便的。
局部变量通常在它所在的语句块结束的时候被释放。如果你不想释放某个局部变量,可以在局部变量上加上static进行声明。
另外,除了作用域不同,C的变量之间还有存储期(storage duration)的差别。
1. 静态存储期(static storage duration)
全局变量、文件内的static变量、指定static的局部变量都持有静态存储期。这些变量被称为静态变量。
持有静态存储期的变量的寿命从程序运行时开始,到程序关闭时结束。换句话说,静态变量一直存在于内存的同一地址上。
2. 自动存储期(auto storage duration)
没有指定static的局部变量,持有自动存储期。这样的变量被称为自动变量。
持有自动存储期的变量,在程序运行进入它所在的语句块时被分配以内存区域,该语句块执行结束后这片内存区域被释放。这个特征通常使用“栈”的机制来实现。
接下来就不是“变量”了。C中可以使用malloc()函数动态分配内存。通过malloc()动态分配的内存,寿命一直延续到使用free()释放它为止。
在程序中,如果需要保持一些数据,必须在内存中的某个场所取得相应大小的内存区域。总结一下,在C中有三种内存区域的寿命。
1. 静态变量
寿命从程序运行时开始,到程序关闭时结束。
2. 自动变量
寿命到声明该变量的语句块被执行结束为止。
3. 通过malloc()分配的领域
寿命到调用free()为止。
原文地址:http://blog.csdn.net/jjjcainiao/article/details/27113935