关键字static在C语言中的三种用法

简介: 关键字static在C语言中的三种用法

static字面上的意思就是静态的,在C语言中作为关键字存在。

1. static 修饰局部变量

  • 没有static 修饰p的情况下,p作为test函数的局部变量,进入test函数就创建,退出test函数就销毁,因此每次进入test都会重新执行int p = 0;并且p++,所以最终结果为五个1。
  • 有static 修饰p的情况下,此时p就是静态的局部变量,只有循环的第一次会执行int p = 0;,往后的循环会自动跳过int p = 0;,并且退出test函数之后依然不会销毁,会一直存在于内存之中。第一次循环p为1,退出test函数之后不销毁,第二次循环时p仍然保留着第一次循环的值1,此时再次执行p++即第二次循环为2,往后同理。

可以简单理解为:static修饰局部变量时,局部变量的生命周期变长了,但是作用域仍然不变,只能在局部范围内使用。

2. static 修饰全局变量

因为全局变量是具有外部链接属性的,这种属性决定了全局变量可以在多个文件之间相互使用,使用方法是通过extern关键字来声明外部文件的全局变量。

而在使用static修饰全局变量之后,将全局变量test的外部链接属性变成了内部链接属性,使得test只能在当前.c文件内部使用,不能在其他.c文件中使用了,因此会报错。

可以简单理解为:static修饰全局变量时,全局变量的作用域缩小了,只能够在当前.c文件内使用。当需要全局变量不被其他文件使用时,可以使用static限制其作用域,减少数据污染。

3. static 修饰函数

在理解了static修饰全局变量后,修饰函数就非常好理解。

函数也是具有外部链接属性的,决定了函数可以被多个文件使用,使用方法依然是extern关键字修饰。

同理,当static修饰函数时,函数的外部连接属性也被改变成内部链接属性,此时test1.c将无法找到Add()函数。

可以简单理解为:static修饰函数时,函数的作用域缩小了,只能够在当前.c文件内使用。当不需要其他文件使用到该函数时,可以用static进行限制。

目录
相关文章
|
2月前
|
C语言
C语言判断逻辑的高阶用法
在C语言中,高级的判断逻辑技巧能显著提升代码的可读性、灵活性和效率。本文介绍了六种常见方法:1) 函数指针,如回调机制;2) 逻辑运算符组合,实现复杂条件判断;3) 宏定义简化逻辑;4) 结构体与联合体组织复杂数据;5) 递归与分治法处理树形结构;6) 状态机管理状态转换。通过这些方法,可以更高效地管理和实现复杂的逻辑判断,使代码更加清晰易懂。
229 88
|
5月前
|
C语言
【C语言】:static和extern的详细介绍和使用
【C语言】:static和extern的详细介绍和使用
43 1
|
1月前
|
C语言 C++
C 语言的关键字 static 和 C++ 的关键字 static 有什么区别
在C语言中,`static`关键字主要用于变量声明,使得该变量的作用域被限制在其被声明的函数内部,且在整个程序运行期间保留其值。而在C++中,除了继承了C的特性外,`static`还可以用于类成员,使该成员被所有类实例共享,同时在类外进行初始化。这使得C++中的`static`具有更广泛的应用场景,不仅限于控制变量的作用域和生存期。
53 10
|
3月前
|
存储 缓存 编译器
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(下篇)
scanf处理⽤⼾输⼊的原理是,⽤⼾的输⼊先放⼊缓存,等到按下回⻋键后,按照占位符对缓存进⾏解读。 解读⽤⼾输⼊时,会从上⼀次解读遗留的第⼀个字符开始,直到读完缓存,或者遇到第⼀个不符合条件的字符为⽌。
162 2
|
3月前
|
存储 C语言
【C语言篇】scanf和printf万字超详细介绍(基本加拓展用法)(上篇)
printf 的作⽤是将参数⽂本输出到屏幕。它名字⾥⾯的 f 代表 format (格式化),表⽰可以定制输出⽂本的格式。
75 1
|
3月前
|
存储 C语言
【C语言函数】static和extern关键字修饰
【C语言函数】static和extern关键字修饰
|
5月前
|
存储 C语言
c语言scanf函数用法
c语言scanf函数用法
|
5月前
|
存储 C语言
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
C语言学习记录——联合体(共用体、特点、用法、联合体大小计算)
77 2
|
5月前
|
存储 C语言
C语言学习记录——复习数据存储类别(auto、register、static、extern)
C语言学习记录——复习数据存储类别(auto、register、static、extern)
42 1
|
4月前
|
C语言