【C++】C语言static变量和函数

使用 static 修饰的变量或函数的作用域仅限于当前模块,对其他模块隐藏,利用这一特性可以在不同的文件中定义同名的变量或函数,而不必担心命名冲突。

 

 

static 除了可以修饰全局变量,还可以修饰局部变量,被 static 修饰的变量统称为静态变量(Static Variable)。

 

 

不管是全局变量还是局部变量,只要被 static 修饰,都会存储在全局数据区(全局变量本来就存储在全局数据区,即使不加 static)。

 

 

全局数据区的数据在程序启动时就被初始化,一直到程序运行结束才会被操作系统回收内存;对于函数中的静态局部变量,即使函数调用结束,内存也不会销毁

注意:全局数据区的变量只能被初始化(定义)一次,以后只能改变它的值,不能再被初始化,即使有这样的语句,也无效。

 

 

我们在 func() 中定义了一个静态局部变量 n,它存储在全局数据区,func() 函数执行结束不会被销毁,下次调用继续有效。全局数据区的变量只能初始化一次,第一次调用 func() 时已经对 n 进行了初始化,所以再次调用时就不会重复初始化了。

静态局部变量虽然存储在全局数据区,但是它的作用域仅限于函数内部!!!!

例子:

//作者:王磊
#include <stdio.h>
int func(){
    // 也可以不赋初值 0,静态数据区的变量默认初始化为 0
    static int n = 2;
    n++;
    printf("Function is called %d times.\n", n);
    return n;
}
int main(){
    int i, n = 0;
    for(i = 1; i<=5; i++){
        func();
    }
    printf("n = %d\n", n);
    //全局数据区的数据在程序启动时就被初始化,
    //一直到程序运行结束才会被操作系统回收内存;
    //对于函数中的静态局部变量,即使函数调用结束,
    //内存也不会销毁。
    func();        //此时屏幕输出为8
    return 0;
}

 

 

总结起来,static 变量主要有两个作用:

1) 隐藏

程序有多个模块时,将全局变量或函数的作用范围限制在当前模块,对其他模块隐藏。

2) 保持变量内容的持久化

将局部变量存储到全局数据区,使它不会随着函数调用结束而被销毁。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值