C语言static的用法你搞懂了吗?(c语言零基础就可以看懂)
static的三种用法
- 1.修饰局部变量
- 2.修饰全局变量
- 3.修饰函数
- 总结
1.修饰局部变量
当修饰局部变量时, static 是把一个数据从栈区上移到静态区的,静态区的变量是在程序结束后才释放。(如果你不理解静态区、栈区,请看下图)
上图中我们可以看到 printf(“%d”,a); 编译器在这里报错了
这是因为,没有找到变量 a
这里我们可以得出:static 只是修改了变量的生命周期 ,没有修改变量作用域!!
2.修饰全局变量
全局变量本身是具有外部链接属性的,如在 A 文件中创建的变量,通过“链接”(extern)可以在 B 文件中使用
extern 的作用是声明外部符号
如下图:
当修饰全局变量时,static 会修改全局变量的作用域,这个变量就只可以在当前直接所在的源文件内使用了。
static的修饰,会把全局变量的属性变成内部链接属性,最终使得全局变量的作用域变小了
如下图
当给 int a =0; 加上 static 时
这个程序就编译不过去了
所以static在修饰全局变量时,会该它的作用域,使它只能在当前文件中使用
3.修饰函数
函数在外部文件的使用方法有两种:
一种是extern 在外部文件中声明函数。
一种是在外部文件中,引用函数所在的文件,#include “函数所在的文件” ,这种方法最好引用头文件,不要去引用其他文件。
所以我们这里只用extern,在外部文件中声明函数
static修饰函数与修饰全局变量,有很多相同点
比如:
没有用static修饰时也可以在外部文件中使用
当被static修饰后就只能当前文件中使用了
比如:
所以stastic修饰函数,使函数只能在源文件内部使用,无法在其他源文件中使用
总结
static修饰局部变量:使局部变量生命周期延长,但它并不等于全局变量。
static修饰全局变量:缩短了全局变量的作用域,使它只能在当前文件中使用。
static修饰函数:缩短了函数的作用域,使它只能在当前文件中使用。
CSDN-Ada助手: 推荐 C 技能树:https://edu.csdn.net/skill/c?utm_source=AI_act_c
专科在努力!: 有if判断的,如果后面的大于前面的数,两个数就交换了
Andy_also: 25j不是等于0吗
紫须上人.: 哥们你除数被除数是不是写反了
小余要努力: 望回关