①关于变量存储的内存分布
C语言把保存所有变量的数据区分为动态存储区和静态存储区。动态存储区使用堆栈来管理的,适合函数动态分配与回收存储单元。而静态存储区相对固定,管理比较简单,食欲存放全局变量和静态变量。在静态存储区中,除了全局变量外,还有另外一种特殊的局部变量--静态局部变量。它存放在静态存储区,不会像普通的局部变量那样因为函数调用结束而被系统回收,它的生命周期会持续到程序结束。由于存储单元被保留,一旦含有静态局部变量的函数被再次调用,则静态局部变量会被重新激活,上一次函数调用后的值仍然保存着,可以供本次调用继续使用。
静态变量定义格式:
static 类型名 变量表
static double f =1;局部变量又称为自动变量。自动变量如果没有赋初值,其存储单元中将是随机值。就静态变量而言,如果定位时没有赋初值,系统自动赋0,并且赋初值只在函数第一次调用时起作用,以后调用都按前一次调用保留的值使用。这是因为静态局部变量的生存周期始于函数的第一次调用,贯穿于整个程序,当函数第一次调用时,静态局部变量的内存单元得以分配,赋以处置,而函数被再次调用时,此静态局部变量已经存在,计算机不会为它分配单元,赋初值也不再发生。但静态局部变量受变量作用范围限制,不能作用于其他函数。
静态变量(静态局部变量,静态全局变量)和全局变量都位于静态存储区,他们的共同特点是生存周期贯穿于真个程序执行过程。区别在于作用范围不同,全局变量可作用于所有的函数,静态变量只能用于所定义的函数。
②
网友评论