当它用于函数定义时,或用于代码块之外的变量声明时,static关键字用于修改标识符的链接属性(从external改为internal),但标识符的存储类型和作用域不受影响。用这种方式声明的函数或变量只能在声明它们的源文件中访问。
当它用于代码块内部的变量声明时,static关键字用于修改变量的存储类型,从自动变量修改为静态变量,但变量的链接属性和作用域不受影响。用这种方式声明的变量在程序执行之前创建,并在程序的整个执行期间一直存在,而不是每次在代码块开始执行时创建,在代码块执行完毕后销毁。
int x = 4;
void incre() {
    static int x = 1;
    x *= x + 1;
    printf("%d", x);
}
int _tmain(int argc, _TCHAR *argv[]) {
    int i;
    for (i = 1; i < x; i++) {
        incre();
    }
    return 0;
}
static初始化一次,使得函数结束时局部变量的x不被释放,下一次使用函数时x使用上次的值,此外局部变量会覆盖全局变量。