首页 > 代码库 > 征服C指针-C的变量种类

征服C指针-C的变量种类

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()为止。