• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

C语言-static的用法

武飞扬头像
zyc0705
帮助1

1、static 关键字

C 语言中 static 关键字修饰变量和函数

static有三种不同的用法:

   1.修饰局部变量;

   2.修饰全局变量;

   3.修饰函数

局部变量:当函数第一被调用,函数中的静态局部变量被初始化,再次调用这个函数,这个 static 变量也不会再次被初始化,仍是保存的前一次函数调用时的结果。 (作用域不变,生存期改变)

全局变量: static 说明的全局变量只可以在当前 c 程序文件中使用(作用域收到限制,生存期不变)。函数: static说明的函数只可以在当前 c 程序文件中使用 (作用域收到限制,生存期不变)。

全局变量:定义在函数外部的变量 (尽量少用,不安全)
局部变量:定义在函数内部的变量,包括形参
链接属性:针对多文件,一个文件的符号(变量,函数)是否可以被其它文件所见
头文件:存放函数的声明
源文件:存放函数的实现

2、局部变量介绍:

示例1: 

 学新通

运行结果: 

 学新通

 示例2:

  1.  
    #include<stdio.h>
  2.  
     
  3.  
    void Fun()
  4.  
    {
  5.  
    static int a = 0;//第一次定义时执行,以后再来时不执行,考试重点
  6.  
    a ;
  7.  
    printf("%d\n",a);
  8.  
    }
  9.  
    int main()
  10.  
    {
  11.  
    //int a = 10;
  12.  
    //printf("%d\n",a);
  13.  
    for(int i=0;i<10;i )
  14.  
    {
  15.  
    Fun();
  16.  
    }
  17.  
    return 0;
  18.  
    }
  19.  
     
学新通

运行结果:

学新通

       局部变量的生命周期就是其所在的那个局部范围,简单来说就是进这个范围变量就创建,出这个范围变量就销毁。

       因为static修饰的变量在一个程序只会执行一次,之后就不会发生改变了。本质上是因为static修饰的局部变量存储位置改变了,局部变量是存储在栈区内,而静态变量则是存储在静态区内。而这种改变带来的影响就是使得局部变量的生命周期变得和整个程序一样长,即:局部变量出了其作用域也将不会销毁,除非程序结束。值得注意的是虽然局部变量的声明周期得到了很大的提升,但他的作用域没有发生任何的改变,还是只能在那个局部的范围内使用。
  

内存大致上被划分为三个区域:栈区,堆区,静态区。

学新通

3、 全局变量介绍:

全局变量在不同的源文件中是可以使用的,只不过需要先用extern外部声明一下。

  1.  
    #include<stdio.h>
  2.  
     
  3.  
    //全局变量介绍
  4.  
    int g_a = 10;//全局变量,从定义开始直到文件结尾都能使用
  5.  
    int g_b;//全局变量未初始化,系统自动初始化为0
  6.  
    //extern int g_c;//引用外部符号
  7.  
    //extern int g_d;
  8.  
     
  9.  
    void Fun()
  10.  
    {
  11.  
    printf("%d\n",g_a);
  12.  
    }
  13.  
     
  14.  
    int main()
  15.  
    {
  16.  
    printf("%d\n",g_a);
  17.  
    Fun();
  18.  
    printf("%d\n",g_b);
  19.  
     
  20.  
    // printf("%d\n",g_c);
  21.  
    // printf("%d\n",g_d);
  22.  
     
  23.  
    return 0;
  24.  
    }
学新通

运行结果如下:

学新通

 全局变量是具有外部链接属性的,而static修饰的全局变量的时候就把这个外部链接属性变成了内部链接属性

4、总结

局部变量被static修饰时生命周期将变得和整个程序一样长,但作用域并没有变化。而static修饰全局变量和函数时,就只能在该源文件内部使用,将于外部隔绝起来。

这篇好文章是转载于:学新通技术网

  • 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
  • 本站站名: 学新通技术网
  • 本文地址: /boutique/detail/tanhgcccfe
系列文章
更多 icon
同类精品
更多 icon
继续加载