看了公司的一些源码,有些函数前面带个static 哥当时就不淡定了,这玩意杂用,为什么用?一直绕着我。是否新手和我一样有着困惑,我现在就全面给大家说下static 只限于c,c++俺不太懂。
首先大家要了解一下 一个程序的存贮空间,eg:
*****************************
static int k = 9 全局静态存储区
int a=10 全局静态存储区
void fun()
{
int i=1;
static int j=1;
i++;
j++;
printf("i=%d\n",i);
printf("j=%d\n",j);
}
int main()
{
int i=1; 栈存储区
static j=1; 全局静态存储区
char[8]={"abc"}; 文字存储区
int *head=malloc(sizeof(int*2)); // 堆存贮区
fun();
fun();
fun();
}
运行次程序,看会打印出什么,
i=2,j=2;
i=2,j =3;
i=2,j=4;
i的值在栈中存储,fun()函数调用完后,i值就消失了。j在全局静态变量存储着,fun()调用完后,j值仍然保存。
static修饰函数时,起到封装函数的作用。eg:
a.c中
static void fun()
{
..
}
b.c这个文件中则调用不出来fun()这个函数;
static 修饰全局变量时:
a.c
static int i=1;
int j=2;
main()
{
}
b.c中:
可以通过extern j,和extern i;
编译可以通过,但是运行时候出错,因为i是static,起到隐藏封装作用,只对a.c起到作用,其他文件引用将报错;