一、static
1.修饰局部变量
可以发现,当static修饰局部变量n时,n每一次的值都被保留,而没有static修饰的每一次的值 每一次进入test 时 n重新创建并赋值为0,出·test(),值就被销毁了
这是因为static修饰局部变量改变了变量的⽣命周期,⽣命周期改变的本质是改变了变量的存储类型,本 来⼀个局部变量是存储在内存的栈区的,但是被 static 修饰后存储到了静态区。存储在静态区的变量和全局变量是⼀样的,⽣命周期就和程序的⽣命周期⼀样了,只有程序结束,变量才销毁,内存才 回收。但是作⽤域不变的。
2.修饰全局变量(包括函数)
⼀个全局变量被static修饰,使得这个全局变量只能在本源⽂件内使⽤,不能在其他源⽂件内使⽤。 本质原因是全局变量默认是具有外部链接属性的,在外部的⽂件中想使⽤,只要适当的声明就可以使 ⽤;但是全局变量被 static 修饰之后,外部链接属性就变成了内部链接属性,只能在⾃⼰所在的源⽂件内部使⽤了,其他源⽂件,即使声明了,也是⽆法正常使⽤的。
如下:
二、extern
extern 是⽤来声明外部符号的,如果⼀个全局的符号在A⽂件中定义的,在B⽂件中想使⽤,就可以使⽤ extern 进⾏声明,然后使⽤。
如下4张图片:
对比可知,要 使⽤ extern 进⾏声明,然后使⽤,才能正常运行
但我发现不加extern 的声明也是可以的,哈哈。
但是一定要声明,不然无法识别另一个文件的外部符号(自定义函数或变量)
三、const
用const修饰,一般是不想让这个变量被改变