static静态变量
静态变量 类型说明符是static,静态变量又分为静态全局变量和静态局部变量。
外部变量又称全局变量,此时该变量的作用域为整个工程,能被其他文件函数访问,其他文件若访问需要在本文件添加使用extern声明。
静态局部变量
声明方式:
作用域:本函数仅本函数内,不能本其他函数访问。
特点
1.函数体内如果在定义静态变量的同时进行了初始化,则以后程序不再进行初始化操作,而局部变量会在每次调用时都会重新初始化。
2.静态局部变量的初始化表达式必须是一个常量或者常量表达式。即使局部静态变量定义时没有赋初值,系统会自动赋初值0(对数值型变量)或空字符(对字符变量);静态变量的初始值为0。局部变量若未初始化那么状态将是未知。
3.Static类型的内部变量是一种只能在某个特定函数中使用,但一直占据存储空间的变量。
#include < stdio. h>
int f(int a){
auto b = 0;
static c = 3;
b = b + 1;
c = c + 1;
return (a+ b+ c) ;
}
main(){
int a = 2, i;
for ( i = 0; i < 3; i++ )
printf( "%d\n" , f(a));
}
静态全局变量
声明方式:
作用域:当前文件,不能被其他文件访问。
静态全局变量必须要与全局变量做区别,全局变量的作用域为整个工程。
PS:
外部的 Static声明亦可用于声明函数。如果将函数声明为Static类型,则该函数名除了对该函数声明所在的文件可见外,其他文件均无法访问。
如果在函数中需要返回某一局部变量的地址时,请将该变量使用static局部变量。因为局部变量使用的栈,而static使用的.BSS或者.data。没有人会尝试返回局部变量的指针,该变量的内存占用会在函数结束后自动释放。