static

静态存储类型,既可以在函数体内,也可以在函数体外。也就是static既可以用作局部变量,只存在于函数体内,也可以用作全局变量。(初值默认为0)

作为局部变量时,static变量在内存中以固定地址存放,而不是堆栈形式(堆栈相当于在函数体执行完之后,函数体内的数据就会直接释放内存,数据清零),在程序没有结束之前,static类型的数据会保存在一个固定的地址并且数据变量会一直保留,在调用时会保留上次调用存储空间。

#include <stdio.h>

int main()
{
    int a=1;
    while(a<5)
    {
        static int b;
        b++;
        printf("b=%d \n",b);
        a++;
        printf("a=%d \n",a);
    }
    return 0;
}

代码中如果没有对b变量进行static,输出的结果会是:“b=1”循环,而a会是一个不断+1的循环。因为变量a不在函数体while内部,而是存于整个主函数内部,不属于while函数体的局部变量,所以每次循环都会和现在声明为static类型的b变量一样出现递增的情况。

extern

在文件中函数体外说明的数据类型,所有其他文件中的程序或者函数都可调用这个变量。extern也被称为外部参照引用型,用extern说明的变量是从其他文件引用的变量。但是,当static说明的变量为全局变量时,这个变量其他外部程序将无法引用。

外部声明变量:

int a=20;

 主函数需要调用外部文件变量:

#include <stdio.h>

extern int a;

int main()
{
    printf("a=%d \n",a);

    return 0;
}

 上述程序中如果外部声明变量的程序改为:static int a=20;

那么主函数将无法调用a变量,程序会报错。

Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐