0


看不会你来真实我!!速进!!关于static在c语言中的具体作用详解!!

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档

文章目录


前言

在我们学习c语言的过程中,相信大家都遇到过static,那么这到底是个啥玩意,到底怎么用,用起来有什么麻烦的地方?您先别急,且听我细细道来!!


提示:以下是本篇文章正文内容,下面案例可供参考

一、what is static?

static在c语言中是类似for,break,continue的关键字,较为常见

二、how to use static?

here are three examples:

1.修饰局部变量

static修饰局部变量会使局部变量成为静态局部变量,静态局部变量和普通局部变量又有何不同?

不多bb,看代码:

主:

#include<stdio.h>
int main()
{
    for(int i=0;i<3;i++)
        {
            www();
        }
    return 0;
}

头文件:

void www()
{
    int i=0;
    i++;
    printf("%d",i);
}

当此时,我们会打印出如下情况

然而我们让代码稍加改变,加上今天的主角static,那么结果会截然不同:

总结:

1)第一个为什么打印了三个1:

i作为局部变量在www函数中被定义,所以i的生命周期只会存在在函数www中,当调用函数www时i被定义生成,当函数结束时,则生命周期结束,函数销毁,在下一次创建时,将会重新创建新的i。

2} 第二个为什么会打印连续整数:

static修饰局部变量之后,将i的生命周期转变为全局变量的生命周期,因此,在每一次调用这个函数的时候www函数结束,但是变量i并没有被完全释放,在下一次调用函数www时,对i也不重新定义和初始化,降延续上一次结束时i的值,所以自然上述函数将打印连续不断的整数

3.修饰全局变量:

当static修饰全局变量之后,会将原本储存在静态存储区的全局变量变成静态全局变量,当此时,static不得在其他文件中使用,此时,你可以把它当成本文件的私有变量!!!

4.修饰函数

static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。static 修饰的变量存放在全局数据区的静态变量区,包括全局静态变量和局部静态变量,都在全局数据区分配内存。初始化的时候自动初始化为 0。

5.数据安全性

考虑到数据安全性(当程序想要使用全局变量的时候应该先考虑使用 static)

总结!!!

静态变量与普通变量

1.静态全局变量有以下特点:

  • (1)静态变量都在全局数据区分配内存,包括后面将要提到的静态局部变量;
  • (2)未经初始化的静态全局变量会被程序自动初始化为0(在函数体内声明的自动变量的值是随机的,除非它被显式初始化,而在函数体外被声明的自动变量也会被初始化为 0);
  • (3)静态全局变量在声明它的整个文件都是可见的,而在文件之外是不可见的。

优点:静态全局变量不能被其它文件所用;其它文件中可以定义相同名字的变量,不会发生冲突。

(1)全局变量和全局静态变量的区别

  • 1)全局变量是不显式用 static 修饰的全局变量,全局变量默认是有外部链接性的,作用域是整个工程,在一个文件内定义的全局变量,在另一个文件中,通过 extern 全局变量名的声明,就可以使用全局变量。
  • 2)全局静态变量是显式用 static 修饰的全局变量,作用域是声明此变量所在的文件,其他的文件即使用 extern 声明也不能使用。

2. 静态局部变量有以下特点:

  • (1)该变量在全局数据区分配内存;
  • (2)静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
  • (3)静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为 0;
  • (4)它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束。

一般程序把新产生的动态数据存放在堆区,函数内部的自动变量存放在栈区。自动变量一般会随着函数的退出而释放空间,静态数据(即使是函数内部的静态局部变量)也存放在全局数据区。全局数据区的数据并不会因为函数的退出而释放空间。


本文转载自: https://blog.csdn.net/m0_72018048/article/details/126394388
版权归原作者 乐言.. 所有, 如有侵权,请联系我们删除。

“看不会你来真实我!!速进!!关于static在c语言中的具体作用详解!!”的评论:

还没有评论