关键字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语言猜数字小游戏(也包含python实现的用法)
本文基于VS2022、pycharm和前面的知识,写一个凭借分支与循环的小游戏,比如: 写一个猜数字游戏 游戏要求: 电脑自动生成1~100的随机数 玩家猜数字,猜数的过程中,根据猜测数据的大小给出大了或小了的反馈,直到猜对,游戏结束 在pyhton中生成随机数是比较简单的,可以直接导入random的包,直接生成随机数,导致写猜数字小游戏变成了判读语句和循环语句嵌套就能写出来,所以我不做过多的介绍了,可以直接看后面的代码展示,想了解更多的python可看python的基础知识,这里面有我在学习python的过程中写的笔记
33 0
|
5月前
|
编译器 C语言
C语言的转义字符,转义字符的用法
C语言的转义字符,转义字符的用法
|
5月前
|
存储 程序员 C语言
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
C语言关键字是什么?什么是关键字?什么是字符和ascll码值
|
1天前
|
算法 C语言
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-2
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
1天前
|
算法 编译器 API
C语言易混淆、简单算法、结构体题目练习、常见关键字总结-1
C语言易混淆、简单算法、结构体题目练习、常见关键字总结
|
19天前
|
Unix Linux 编译器
C语言中EOF的用法
C语言中EOF的用法
7 0
|
19天前
|
安全 编译器 C语言
C语言中的const关键字
C语言中的const关键字
16 2
|
2月前
|
C语言
C语言4🔥:运算符,运算符的基本用法
C语言4🔥:运算符,运算符的基本用法
34 0
|
2月前
|
程序员 C语言
在C语言中,typedef是一种用来创建新的数据类型名的关键字
在C语言中,typedef是一种用来创建新的数据类型名的关键字
10 0
|
2月前
|
存储 编译器 C语言
C语言的关键字
C语言的关键字
15 0