C语言关键字Static

在C语言中,static关键字有多种用途,它主要用于控制变量的生命周期和可见性,以及函数的作用域和链接。以下是static在C语言中的主要作用:

1.局部变量中的static

通常,局部变量在函数执行结束后就会被销毁。但是,如果局部变量被声明为static,则该变量在程序执行期间只会被初始化一次,生命周期从程序开始执行时开始,直到程序结束执行时结束。并且其值会在函数调用之间保持不变。这意味着每次函数调用时,该变量都会保留其上次的值。

include <stdio.h>

void counter();

int main()
{
  counter();
  counter();
  counter();
  counter();
  return 0;
}
/*
  * 功能:static定义的局部变量
*/
void counter()
{
  static int count = 0; // 静态局部变量
  count++;
  printf("%d\n", count);
}

运行结果:

图1 static定义的局部变量只会被初始化一次,并且会保留上一次的值

 

在这个例子中,count是一个static局部变量。每次调用counter函数时,count的值都会递增,而不是被重新初始化为0。这是因为count的生命周期是整个程序的执行期间,它只会在程序开始时初始化一次,并在每次函数调用时保留其值。

需要注意的是,虽然static局部变量在程序的整个执行期间都存在,但它们仍然只在其声明的代码块(如函数)内部可见。

2.全局变量和函数中的static

当static用于全局变量或函数时,它限制了变量的可见性或函数的作用域。static全局变量或函数只能在声明它们的文件内部访问,而不能被其他文件访问。这提供了封装和数据隐藏的能力。例如,现在我用了一个file1.c 文件写了以下代码:

// file1.c 
static int secret = 42; //只在定义它的文件可见 
static void hiddenFunction()
{  
    //只能在定义它的文件中调用  
}

在这个例子中,secret变量和hiddenFunction函数都只能在file1.c 文件中访问。在file2.c中不可访问:

extern int secret; 错误:变量secret在file1.c中是static的,这里不可见
extern void hiddenFunction();// 错误:hiddenFunction在file1.c中是static的,这里不可见

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值