static是静态的意思
C语言中static的作用
1. 在函数体内,静态变量具有“记忆”的功能,即在函数体内部一个被声明为静态的变量在函数的调用过程中值是不变的,初始化只会被执行一次
2. static全局变量和全局函数只能被本程序的函数所使用,不能被其它文件使用。一般的全局变量和全局函数可以被项目其它文件所使用
3. static变量,不论是全局static变量还是static局部变量,都是存储在内存中的全局数据区(静态存储区),如果我们没有对该变量初始化则默认值为0
C++中static的作用
1. 除了C语言中具有的作用之外,还有其它的作用
2. 在C++中,在类内部数据成员或类成员函数声明前面加上static说明该数据成员和成员函数属于类的静态成员变量和静态成员函数
3. 类的静态成员变量是属于某一个类,在所有实例化对象中共享访问,必须被初始化并且只能初始化一次
4. 类的静态成员函数式属于某一个类,在所有实例化对象中共享访问,类的静态成员函数没有this指针因此只能够访问类的静态成员变量
问题:为什么static局部变量只能被初始化一次?
原因是所有的static变量都是存储在全局数据区(静态存储区),因此它的生命周期和源程序一样,所以只需要被初始化一次。
例子1 :
#include<stdio.h> void Fun(int i){ static int value = i++; printf("%d\n", value); } int main(){ Fun(0); Fun(1); Fun(2); return 0; }
程序输出结果是
0
0
0
解释如下:
1. 因为static局部变量只能被初始化一次,因此第一次执行函数Fun(0)的时候,会执行static int value = i++,则value = 0则第一次输出0
2. 第二次和第三次调用函数Fun(1)和Fun(2)的时候由于不在执行初始化因此value的值还是0,输出值为0
例子2:
#include<stdio.h> void Fun(int i){ static int value = i++; value = i++; printf("%d\n", value); } int main(){ Fun(0); Fun(1); Fun(2); return 0; }
程序输出
1
1
2
解释如下:
1. 因此static局部变量只能被初始化一次,因此第一次执行函数Fun(0)的时候,会执行static int value = i++,则value = 0,i = 1接下来执行value = i++,则value = 1,输出1
2. 第二次和第三次调用函数的时候,i为1和2,只会执行value = i++,因此value的值为1和2,输出1和2。