大家好😃,我是想要慢慢变得优秀的向阳🌞同学👨💻,希望喜欢的小伙伴们,点个关注😘或者点个赞👍,如果觉得我的博客写的还不错,可以关注我~~,一起努力进步!!!💪💪当然如果有问题想问博主或者如果博客内容有问题,欢迎大家私聊或者在下方提出问题,我会积极的回复哦~🥰🥰🥰
直接放本章的内容思维导图,方便读者提前浏览!
目录
🎺🎺修饰局部变量🎷🎷
不加static
#include<stdio.h>
void test()
{
static int i = 0;//如果不加static的情况又是什么呢?
i++;
printf("%d ", i);
}
int main()
{
int a = 0;
for (a = 0; a < 10; a++)
{
test();
}
return 0;
}
原因:因为int i变量是函数内部的局部变量,每次调用完函数后自动销毁,再次调用函数时重新生成并赋值为0再经过i++后输出为1,一直循环10该过程!
加static
在了解真正本质原因之前,我们要先学习一点额外知识
原因:在计算机里面内存可以简单分为栈区,堆区,静态区,根据局部变量的特性可以推断出内存中大部分栈区的变量出属于它本身的生命周期范围就自动销毁了,同理也可推出静态区的变量,而关键字 static的作用就是改变了局部变量的储存位置,将局部变量从栈区拿出来放到了静态区!使静态局部变量出了作用域依然存在,到程序结束,生命周期才结束(main函数走到了return 0的时候),而且作用范围却没有改变!还在属于它原来的生命周期内(即函数test内部),而且只有第一次进入函数进行初始化赋值为0,其他次没有!
🎸🎸修饰全局变量🎻🎻
加static
不加static
首先解释一下extern关键字:声明外部符号(多用于函数和全局变量)
原因:这次static改变全局变量的外部连接属性(可以简单认为就是能与其他文件可以联系的一个属性),使其失去在其他文件能通过 extern来再次使用的功能!只能在其存在的源文件内部使用,不能在其他文件使用了(可以简单认为改变了作用域),但没有改变其储存位置和生命周期!
🥁🥁修饰函数🎹🎹
加上static
不加static
原因:与全局变量相同!不再重复需叙述了!