前言:祝各位程序员们1024快乐,技术越来越牛,也希望明年的今天回过头来和今天对比能骄傲的说:“我变的很牛了!”,话不多说,今天先奖励自己写一篇文章^_^

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

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

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

3.修饰函数-称为静态函数

一、修饰局部变量

这里我们先上代码
#include <stdio.h> void y() { int i = 1; i++; printf("%d ",i); } int main() {
int a = 0; for (a = 0; a < 10; a++) { y(); } return 0; }

这里打印10个2,原因:当第一次出函数时,i 存储的数据就释放了,也就是说第二次进入函数时,i重新创建还是会等于1。以此类推将会全部打印2。

那我们在其前面加上static会发生什么样的改变呢。
#include <stdio.h> void y() { static int i = 1; i++; printf("%d ",i); } int
main() { int a = 0; for (a = 0; a <10; a++) { y(); } return 0; }

这里的结果为2 ~ 11,使用static修饰局部变量 i 后,使其变为静态局部变量,也就是出了y函数后 i 存储的数据没有被释放, 第二次进入时 i
就为2了,经过 i++后打印变为3,最后打印2~11。

在内存中有栈区、堆区、静态区。局部变量储存在栈区中,全局变量和静态变量储存在静态区中。

用static修饰局部变量,其实就是改变了变量的存储类型,使其从栈区存储变为静态区
,使静态的局部变量出了作用域也不被释放,生命周期也变的和全局变量一样,都是程序结束后才释放。所以上面静态局部变量 i
出了作用域后并没有被销毁,而是存储在静态区中。这里需要注意的是就算 i 变为了静态局部变量,但其作用域并没有发生改变,只能在函数y内使用。

二、修饰全局变量

这里我们可以看到创建了两个源文件,(想要在另一个文件中调用其全局变量需要加extern +类型 +名字 ,这里博主前面也讲过了
),这样打印的值为20。那我们加上static会变成怎么样呢

这里编译器报错了,
这是因为一个全局变量在整个工程的内部文件中具有外部链接属性,用static修饰全局变量时,使其变为静态全局变量,也使全局变量的外部链接属性变为内部链接属性,这个全局变量只能在自己的源文件下使用。
可以理解成公共厕所变为了私人厕所,与外界失去了联系(哈哈)。这样在另一个文件就用不了这个全局变量了,当然全局变量age还是可以在自己的文件中使用,例子如下:

三、修饰函数

其实static修饰函数和修饰全局变量很相似

这里我们可以看到函数能正常的使用,那当我们在test2.c中函数后加static呢

可以看到这里报错了,这里的原理和全局变量是一样的,函数本身就具有外部链接属性,当使用static修饰时使其的外部链接属性变为内部链接属性
,从而使函数Add只能在自己的源文件中使用,不能再工程的其他内部源文件使用。 

好了今天介绍的static关键字就到这里了,如果发现错误和不足的地方请各位大佬指出,现在这里谢过各位啦。

技术
©2019-2020 Toolsou All rights reserved,
C语言——qsort函数CSS实现溢出显示省略号网络层协议——ICMP协议C语言小游戏-俄罗斯方块Qt入门教程【基础控件篇】QCalendarWidget日历控件用python来控制wifi连接vue中input框只能输入数字Python内置函数C语言数据结构-顺序表删除重复V2.0.0abaqus质量缩放系数取值_ABAQUS的质量缩放