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

📢 : 关键字static的三种用法

✨✨ static的用法有三种,分别是 1. 静态局部变量 2. 静态全局变量,3. 静态函数,下面我们一一介绍 :

一,静态局部变量

  • 栈区 :存放局部变量,形式变量,临时作用的变量。特点:进入作用于创建,出了作用域销毁(还给操作系统)
  • 静态区 :存放全局变量,静态变量 。特点 : 创建后,直到程序结束后才销毁(还给操作系统)
    在这里插入图片描述
#include <stdio.h>
void test() {
	int a = 5;
	printf("%d  ", ++a);
}
int main() {
	for(int i = 0 ; i < 10 ; i++){
	test();
	}
	return 0;
}

返回 : 6 6 6 6 6 6 6 6 6 6

原因是创建的是局部变量,出了作用域以后就销毁,再次循环以后就会重新创建变量。

#include <stdio.h>
void test() {
	static int a = 5;
	printf("%d  ", ++a);
}
int main() {
	for(int i = 0 ; i < 10 ; i++){
	test();  
	}
	return 0;
}

返回 : 6 7 8 9 10 11 12 13 14 15

原因 : 创建的静态变量存放在静态区,只有在程序结束后才会销毁变量。此时循环创建的静态变量a实际上都指向同一个地址。下面代码展现 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bnQOpwfB-1681313331805)(F:\比特就业课\Git仓库\c-language-learning\1681200184800.png)]

 ✨实际上每次创建的局部变量每次也都指向同一个地址,但是由于他存放在栈区中,当出了作用域以后,这个变量就会被释放,存放的值也就会被销毁。

在这里插入图片描述

二,静态全局变量

*在此之前我会先介绍extern关键字和全局变量的外部链接属性,可以选择性跳过这段。

  • extern关键字 : 表明变量或者函数是定义在其他其他文件中的,也就是当我们调用外部文件的变量和函数时,我们可以使用extern关键字进行声明,表明这个变量或是内存已经被定义了,并且会自动去找到这个变量或是函数所在的文件,

    这个博主写的文章已经很好啦,我们直接去学习一下extern关键字吧。C语言extern关键字用法和理解

  • 外部链接属性 :在一个 .c 文件里面定义一个全局变量,在另外一个.c文件里面可以使用这个全局变量,只需要用一个extern声明一下就可以了。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UnUhTjyQ-1681313331807)(F:\比特就业课\Git仓库\c-language-learning\1681285244890.png)]

✨:sparkles那么如果不想让定义的全局变量被外部链接使用怎么办呢? 这时候可以使用静态全局变量。代码如下 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7WQUwq8G-1681313331808)(F:\比特就业课\Git仓库\c-language-learning\1681285680984.png)]

  • 就是在定义全局变量的时候在前面加上一个static关键字,这样再次运行就会报错 。如 : [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ASaLm7Ia-1681313331809)(F:\比特就业课\Git仓库\c-language-learning\1681285793823.png)]

✨所以,静态全局变量可以把全局变量的外部链接属性变成内部链接属性,使得这个变量只能在自己所在的.c文件内部使用,不能在其他的.c文件内部使用。也就是让全局变量的作用域变小了

三,静态函数

📢 : 其实和静态全局变量是相似的,函数也是具有外部链接属性,可以被其他的.c文件内部使用,为了不被外部的.c文件使用,就可以使用static修饰,变成具有内部链接属性的函数。由于更静态全局变量相似,直接利用代码理解 :

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yvp3dkj6-1681313331810)(F:\比特就业课\Git仓库\c-language-learning\1681295775636.png)]

  • 上面的代码表现了函数的外链接属性 。利用extern关键字是可以使用外部函数的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BGLDgmnF-1681313331811)(F:\比特就业课\Git仓库\c-language-learning\1681295955711.png)]

  • 要是想内部函数不被外部.c文件使用,也就是将其变成内部链接属性,可以使用static关键字,这样test.c文件就会报错,无法使用sum函数。

😄新人创作不易,你的点赞和关注都是对我莫大的鼓励,再次感谢您的观看。😄

  • 17
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

112233123hd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值