【C语言】详解静态变量static

简介: 【C语言】详解静态变量static

关键字static

       

       在C语言中:

               static是用来修饰变量和函数的

       static主要作用为:


1. 修饰局部变量 - 静态局部变量

2. 修饰全局变量 - 静态全局变量

3. 修饰函数 - 静态函数

     

在讲解静态变量之前,我们应该了解静态变量和其他变量的区别:


d2140d3e0765484a8ff01a8d983d18e4.png



修饰局部变量

 

//代码1
#include <stdio.h>
void test()
{
    int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}


运行结果:

79032da08ac54f3b85ddf5295c788631.png


调用静态变量static

//代码2
#include <stdio.h>
void test()
{
    //static修饰局部变量
    static int i = 0;
    i++;
    printf("%d ", i);
}
int main()
{
 int i = 0;
    for(i=0; i<10; i++)
   {
        test();
   }
    return 0;
}


运行结果:


57d5bb12222b4384b324e96591184ed0.png


对比代码1和代码2的效果理解static修饰局部变量的意义.

结论:      

       static修饰局部变量改变了变量的生命周期,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。


修饰全局变量  

1. 
2. //add.c
3. int g_val = 2018;


//代码2
//add.c
extern int g_val;
//test.c
int main()
{
    printf("%d\n", g_val);
    return 0;
}

代码执行:

9bc1fedbb41f490998ff48c3f2800e38.png

当给int g_val添加static静态变量进行修饰后,发生报错

代码执行:


a2a5ebe00a8842309c14260209e7d170.png



 结论:


       全局变量本身是具有外部链接属性的


       在A文件中定义的变量,在B文件中可以通过【链接】使用


       但如果全局变量被static修饰后,这个外部链接属性就变成了内部链接属性,这个全局变量只能在本身源文件内使用


       static可以把外部链接属性,变成内部链接属性,使得全局变量作用域变小

修饰函数

       f6df9ed372be4504a2a60bffa97d878b.png

0260555d02d64b4eb31c95114b8789a2.png



结论:

       函数本身是具有外部链接属性的

       被static修饰后,外部链接属性变成了内部链接属性

       使得这个函数只能在自己所在的源文件内部使用,其他源文件无法链接使用


目录
相关文章
|
7月前
|
C语言
带你熟知关键字static用法——C语言(举例及通俗易懂)
带你熟知关键字static用法——C语言(举例及通俗易懂)
80 0
|
9天前
|
存储 编译器 C语言
c语言中static关键字的作用
c语言中static关键字的作用
|
9天前
|
Java 编译器 C语言
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(下)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
9 0
|
9天前
|
C语言 C++
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(中)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
19 0
|
9天前
|
编译器 C语言 C++
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象(上)
从C语言到C++⑦(第二章_类和对象_下篇)初始化列表+explicit+static成员+友元+内部类+匿名对象
12 1
|
15天前
|
C语言
C语言中关键字static的三种用法
C语言中关键字static的三种用法
|
15天前
|
C语言
【C 语言经典100例】C 练习实例41 - static
【C 语言经典100例】C 练习实例41 - static
24 0
|
9月前
|
存储 编译器 C语言
【C语言】关键字static——static修饰局部变量、全局变量和函数详解!
【C语言】关键字static——static修饰局部变量、全局变量和函数详解!
232 0
|
15天前
|
存储 算法 程序员
【新手解答7】深入探索 C 语言:代码缩进 + 变量作用域、静态变量 + 变量名和函数名重名
【新手解答7】深入探索 C 语言:代码缩进 + 变量作用域、静态变量 + 变量名和函数名重名
38 0
|
15天前
|
C语言
c语言中的static静态(1)static修饰局部变量
c语言中的static静态(1)static修饰局部变量
30 1