C语言static篇

发布时间 2023-05-29 19:56:14作者: alexlance

C语言static篇

变量

#include<stdio.h>
void func()
{
    int a = 0;
    printf("%d\t", a);
    static int b;
    printf("%d\n", b);
}
int main()
{
    func();
    return 0;
}
#include<stdio.h>
void func()
{
    int a = 1;
    printf("%d\t", a++);
    static int b=1;
    printf("%d\n", b++);
}
int main()
{
    for(int i=0;i<5;i++)
       func();
    return 0;
}

以上两个代码程序,说明以下几点内容:

1、缺省状态下变量默认修饰符为auto,static修饰的变量自动初始化为零、

2、static修饰的变量只会初始化一次,可以看到b变量只被赋值过一次为一后就不再初始化

3、而与其相对的auto修饰的变量,则是即用即开,用完就销,数据存储在栈上

4、static修饰的变量则存储在data段

实际上,static修饰的变量还具有以下几点作用:

1、首先是static可以起隐藏作用,普通的全局变量具有全局可见性,可以在不同的源文件中被调用,但是全局变量一旦被

static修饰,那么其仅能对本源文件可见

2、另外,被static修饰的全局变量也允许其他源文件命名相同的全局变量

函数

在函数的返回类型前加上static,就是静态函数。其特性如下:

  • 静态函数只能在声明它的文件中可见,其他文件不能引用该函数

  • 不同的文件可以使用相同名字的静态函数,互不影响

非静态函数可以在另一个文件中直接引用,甚至不必使用extern声明