C语言那些事之static

来源:互联网 发布:数据的标准化处理 编辑:程序博客网 时间:2024/05/06 04:23

C语言关键字:static

static的三个用法:

1.修饰全局变量.  全局变量不可被extern拐到别的文件

2.修饰局部变.只有本函数才能使用,并且只能被初始化一次.

3.修饰函数. 函数作用域为本文件,其他文件不可调用

修饰全局变量:如果有一个文件试图extern 这个全局变量那么编译器会报错(vc6.0,gcc都测试过),这一点估计学过C的都清楚我们重点来看第二跟第三:

下面我们来看一个程序:

#include<stdio.h>

void f2()
{
static int a;
printf("a=%d a的地址:%d\n",a,&a);
}
void f()
{
    static int a=1;
a++;
printf("a=%d a的地址:%d\n",a,&a);
}
int  main()
{
f();
f();
f();
f2();

return 0;
}

能说出结果吗?不论说不说得出还是在编译器里面跑一下吧。

看到结果了吧。

从这个程序我们可以得出以下几点结论

1.static 修饰的变量会放在程序的静态存储区,如果没有被赋值的话那么它会被默认赋值为0(没有static修饰的局部变量可没有这个待遇,其实只要是存储在静态储存区的变量如果没赋值都会被赋值为0)

2.static修饰的局部变量生命周期开始于定义结束于整个进程结束(静态存储区的变量都有这个特性)。

3.static 在不同函数中修饰名字一样的变量,虽然都在静态存储区但不会命名冲突(进程会为不同函数映射不同的存储位置)

4.static修饰的变量只能被初始化一次。

附:程序运行结果图:VC6.0下:

GCC编译器下:






0 0
原创粉丝点击