关键词static的用法

关键词static用于修饰变量和函数

1.修饰局部变量

  static修饰局部变量时,改变了局部变量的存储位置,使得局部变量不被销毁,变成了和程序的生命周期一样长。例如:

#include <stdio.h>

int sum(int a)//定义函数sum
{
  int c = 0;
  static int b = 3;//static修饰整型变量b,第一次循环时b=3,之后b++,b变成4,因为b被static修饰,所以第二次循环时,b=4不被销毁,在第二次循环中b就等于5,同理第三次循环中b=6.
  c ++;
  b ++;
  return (a + b + c);
}

int main()
{
  int i;
  int a = 2;
  for(i = 0;i < 3;i++)//for循环中给i附初值0,i++,当i=3时for循环结束,所以一共执行3次循环,分别是i=0,i=1,i=2时。
  {
    printf("%d\n",sum(a));//在这里打印的就是当i分别等于0,1,2时函数sum中(a+b+c)的值
  }
  return 0;
}

运行结果: 

 在这整个代码中,a和c的值从始至终都没有改变,a=2,c=1。只有b在三次循环中改变了,第一次循环b=4,第二次循环b=5,第三次循环b=6。所以三次循环输出的值(a+b+c)的值分别为7,8,9。

若是整型变量b没有被static修饰,则三次循环的结果为”7 7 7“。因为如果当b没有被static修饰时,第一次循环经过

  int b = 3;

得到b=3,再经过

  b++;

得到b=4。,然后第一次循环返回值(a+b+c)中b的值就为4。

  当第二次循环时,由于b未被static修饰,所以第一次循环所得b=4被销毁,经过

  int b = 3;

得到b=3,再经过

  b++;

得到b=4。,然后第二次循环返回值(a+b+c)和第一次循环返回值相等都为7,b的值都为4,第三次循环同理。

  总的来说,当static修饰一个局部变量时,该局部变量经过第一次循环所得到的值将会保留到第二次循环,第二次循环该局部变量的初始值就用第一次循环所得到的局部变量的值。

2.修饰全局变量

  static修饰全局变量时全局变量由外部链接变为内部链接,导致其他源文件无法使用该变量,通俗的讲,就是当有两个源文件时,1号源文件有一个变量a=4,2号源文件可以通过使用关键词extern来引入源文件中的变量a=4,来用于2号源文件,但当1号源文件中的变量a=4被static修饰时,变量a=4就不能被用在2号源文件中。

 

 如上图2.c中的变量g.li就被用在了源文件1.c中,并打印出g.li的值2024。但当2.c中的g.li被static修饰时,1.c中便不能引用变量g.li。

 

3.修饰函数

  修饰函数时同修饰全局变量相同 , static修饰函数时函数由外部链接变为内部链接,导致其他源文件无法使用该函数

总结
1.static用于局部变量时,改变其存储期但不改变其作用域。
2.static用于全局变量时,不改变其存储期但限制其作用域。
3.static用于函数时,限制函数的作用域但不改变其存储期(函数本身不占用存储期,这里指的是函数的作用范围)。
通过这些用法,static关键字在C语言中扮演了非常重要的角色,有助于管理变量的生命周期和函数的作用范围,从而写出更加模块化和安全的代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值