static关键字

什么是static

static是C/C++中常用修饰符,也常被称为“静态”

static存在的目的

在程序当中,变量的存在类型大致分为全局变量、静态变量、局部变量

程序中所定义的函数,在调用执行的时候,编译器会给他分配空间,但在函数执行结束后,空间就会被释放,那么函数中定义的局部变量就会丢失;

如果我们需要保留函数中变量的值,那么就不能使用局部变量;

可以采取的方式有两个:

1.使用全局变量

全局变量存在一个问题,他使该变量全局可见,在其他源文件中也可以访问全局变量,这可能会带来不便

2.使用静态变量

在程序中,静态变量的存储是有特定区域的,存储区分为两个段,DATA段和BSS段,其中DATA段是用来放置初始化完成的全局变量和静态变量;BSS段存放还未初始化的全局变量和静态变量,因为未初始化,所以BSS段变量全为0;

上述存储过程在程序执行时就会进行,因此在程序执行过程中全局与静态变量值一直存在;而局部变量在函数调用时生成,函数结束时销毁;

static变量作用

static变量只会执行一次初始化,程序结束时才会释放

while(1)
{
    static int a = 10;
    a--;
    printf("%d", a);

}

上述代码中,变量a的值只会初始化一次,那么输出即为9,8,7,6,5,4,3,2,1,0.............;

static变量可以被隐藏起来

假设存在两个源文件a.c和b.c

内容分别为:

//a.c

int a = 10;
void hello
{
    printf("hello\n");

}
//b.c

int main()
{
    extern int a;//首先声明一下为外部变量
    printf("%d", a);
    hello();
    return 0;

}

a.c中所定义的全局变量可以在b.c中使用,如果将a.c中变量a定义为静态变量,那么变量a就无法在其他文件中调用,也就是说不同文件中可以存在相同名字的变量,并且程序运行时可以保存该变量的值;

静态函数

同样也存在静态函数的概念,但和静态变量存在不同;

在一个类中,我们会定义很多函数,成员函数的使用需要首先实例化类,才能调用该成员函数,但类中所定义的静态函数就可以直接调用;例如:

class MyClass
{
    public void instance_func()
    {
        printf("This is instance function");
    }

    public static void staic_func()
    {
        printf("This is static function");
    }

}

调用静态函数与非静态函数的方式:

//调用静态函数,直接调用
MyClass.static_func();


//调用非静态函数,需要实例化
MyClass abc = new MyClass();
abc.instance_func();

因为静态方法属于类的范畴,而不是类的实例,可以通过类名来直接调用静态方法,无需实例化;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值