C语言入门之关键字static的使用

前言

在C语言中: static是用来修饰变量和函数的


一、修饰局部变量

修饰局部变量-称为静态局部变量

        具有关键字static修饰的局部变量出现这个变化的主要原因是因为,在内存中(大致来说):局部变量存储于栈区的区域之中,而静态变量是与全局变量相同,都存储于静态区,而存储在静态区的变量出了它的作用域变量也不销毁,所以生命周期较长。因此,static修饰局部变量的时候,改变了局部变量的存储类型。(但是作用域是不被改变的)

       让我们先来看看有与没有关键字static的代码的区别:

C语言入门之关键字static的使用

       用关键字static修饰的局部变量的生命周期发生了变化,它在第一次进入函数创建之后,就不会因为出函数而销毁,并且会保留上一次计算而保留的值,让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。但是由关键字static修饰的局部变量的作用域是不会发生变化的,还是与普通的局部变量相同,无法在函数外直接使用。

C语言入门之关键字static的使用

       利用反汇编我们可以关注到,被关键字static修饰的局部变量是不具备汇编代码的,同时利用逐语句逐步观察我们也可以发现在除了第一次进入函数时,会执行创建局部变量n并赋值0。但是,随后就不会再次执行一条语句。

二、修饰全局变量

修饰全局变量-称为静态全局变量

       一个全局变量被static修饰,使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。

       让我们先来看看有与没有关键字static的代码的区别:

C语言入门之关键字static的使用

C语言入门之关键字static的使用       在此我们所需要知道,代码的(简易)执行需要经过 (.c) —— 编译(.obj) —— 链接 —— 可执行程序(exe),在编译(.obj)中,一个程序中的文件是不相联系的,只有在链接之下才会相互之间具有联系。而全局变量与函数都是具有外部连接属性的,是可以文件之间相互联系利用的。

        而static修饰全局变量的时候,改变了全局变量的链接属性本来一个全局变量是具有外部链接属性的,但是被static修饰之后就变成了内部链接属性。这时static修饰的全局变量只能在本源文件(.c)中使用,其他文件无法再使用到。

三、修饰函数

修饰函数-称为静态函数 

       一个函数被static修饰,使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

       让我们先来看看有与没有关键字static的代码的区别:

C语言入门之关键字static的使用

C语言入门之关键字static的使用

       其实static修饰函数和修饰全局变量是类似的,一个函数本来也是与全局函数具有外部链接属性的。当被static修饰的时候,外部链接属性就变成了内部链接属性,这个函数就只能本源文件内部使用,其他文件不能再使用了。


总结

static修饰局部变量:
       改变了变量的生命周期 让静态局部变量出了作用域依然存在,到程序结束,生命周期才结束。
static修饰全局变量:
       使得这个全局变量只能在本源文件内使用,不能在其他源文件内使用。
static修饰函数:
       使得这个函数只能在本源文件内使用,不能在其他源文件内使用。

上一篇:二叉树遍历(BFS)


下一篇:301. 删除无效的括号(dfs回溯 bfs)