小记static关键字的用法

文章介绍了C语言中的静态变量类型,包括静态全局变量和静态局部变量,以及它们在内存中的存储位置和作用域。同时,解释了静态函数的概念,即限制函数的作用域只在当前文件,避免命名冲突。文章强调了static关键字在管理变量和函数作用域中的重要性。
摘要由CSDN通过智能技术生成


前言

偶然间看到了陈正冲老师的《C语言深度剖析》,突然觉得自己该重拾C语言了(其实是书写得太好了,忍不住想学)。在原来已经学过一点点的基础上打算再补充一些,可能会有一系列笔记吧,立个flag争取在寒假之前把这本书看完。


一、修饰变量

根据定义范围的不同,变量分为静态局部变量和静态全局变量,但它们都存在内存的静态区。
(1)静态全局变量:作用域仅限于变量被定义的文件中(如.c和.h文件),其他文件即使用 extern 声明也没法使用。作用域是从定义之处开始,到文件结尾处结束,在定义之处前面的那些代码行也不能使用它。若在定义之前使用需在前面加extern,所以一般直接在文件顶端定义即可。
(2)静态局部变量:在函数体里面定义的,就只能在这个函数里使用。若函数结束运行,则在函数里面定义的值仍会保留在内存的静态存储区

C代码

#include <stdio.h>
static int j = 0;//静态全局变量 

void fun1(void)
{
	static int i = 0;//静态局部变量 
	i++;
	printf("func1:%d \t",i);
}

void fun2(void)
{
	int j = 0;
	j++;
	printf("func2:%d",j);
}

int main()
{
 	for(int k=0; k<10; k++)
	{
		fun1();
		fun2();
		printf("\n");
		printf("-----------------------");
		printf("\n");
	}
	return 0;
}

运行结果

在这里插入图片描述
经过仔细一想,原本全局变量的意思是在该文件夹(.c/.h)中使用,而将静态全局变量去掉static后变成全局变量结果是一样的不会变即j还是等于1。而局部变量的生存域是在函数中,只能在函数中使用,函数使用完之后是会销毁的,若在其他地方使用会报错提醒你没有定义该变量;在加上static后,则将值存储到了静态存储区,是不是可以认为间接的变为了“全局变量”呢?但是作用域仅在函数中。这样一来就明白了

二、修饰函数

函数前面加static修饰就变成了静态函数,即对函数的作用域仅局限于本文件。不同的人编写不同的函数时,不用担心自己定义的函数,是否会与其它文件中的函数同名。就算同名也没关系,因为在不同的文件中即有不同的作用域。
第一种含义:表示退出一个块后仍然存在的局部变量
引申的第二种含义:用来表示不能被其它文件访问的全局变量和函数。

总结

学习到了static的用法,但是还要在实际中多运用才能熟悉。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

一只小小的Wu

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

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

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

打赏作者

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

抵扣说明:

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

余额充值