static的作用是什么?
修饰局部变量
局部变量?
就是在花括号{ }内创建的变量。
干嘛用的?
使局部变量出了域不销毁。本质:改变了变量的存储位置,使变量的周期和程序的生命周期一样。
存储位置:变量是内存中的一段存储空间……… 内存分为栈区、堆区和静态区三个区。放在栈区的变量有局部变量,栈区里面的变量的特点是进作用域创建出作用域消除。放在静态区的变量有静态变量,特点是不被重新创建和销毁。
使用:
void text()
{
static int a =1;
a++;
printf("%d ", a);
}
Int main()
{
Int i = 0;
while(I<10)
{
text()
i++;
}
return 0;
}
结果:没使用static之前,运行的结果是:2 2 2 2 2 2 2 2 2 2 ;使用之后的结果是:2 3 4 5 6 7 8 9 10 11。
修饰全局变量
全局变量?
在{}外部定义的变量。生命周期是整个工程也就是整个工程都可以拿来使用的变量。具有链接属性。
干嘛用的?
改变变量的链接属性,将它的外部链接属性变为内部链接属性。也就是说全局变量在一个项目中的都所有文件中都能使用,使用static修饰该变量后,只能在当前源文件中使用。
链接属性……一个c项目中有很多个源文件,他们之间可以通过链接+编生产可执行文件。
使用:
注: 两个源文件一个是add.c另一个是text.c,text.c里面使用add.c里定义的变量g_val,需要用extern声明外部符号。
注:当用static修饰变量g_val后,该全局变量的全局链接属性—>内部链接属性,所以text.c文件中不能使用该变量 ,只能在add.c中使用。
修饰函数
和修饰全局变量一样该变函数的链接属性。
使用:
使用后static后,无法使用外部函数。
.
.
.
补充知识:关键词register (中文寄存器)
register的使用非常简单就是建议编译器将变量放在寄存器中 。
……完结
最后~~看到的小伙伴有什么不懂的可以问我,欢迎大家一起来相互交流学习。😇😛🥳