带你熟知关键字static用法——C语言(举例及通俗易懂)

引入

  首先我们看两个例子:

例1

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

例2

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

   那么请问例1和例2的输出结果一样吗?答案是肯定不一样的。我们来看一下例1和例2分别输出的结果。

   为什么两个的输出结果不一样的,原因就是在static修饰了局部变量。接下来我们仔细分析一下原因。

一、static的简单认识

  1. 在c语言中,static是一个常见的关键字 可用来修饰。
  2. static可修饰局部变量、全局变量、自定义函数。

二、static的具体用法

1、static修饰局部变量

  从刚开始我们引入的两个例子可以发现,例2中static修饰了局部变量。而修饰局部变量有什么意义呢?首先我们先来了解一下局部变量、静态变量等在内存中所储存的位置。

                                       

  我们都知道,局部变量进去作用域时创建,出了作用域就自动释放了。这也是例1打印出来10的一的原因。但是当static修饰局部变量时,例2中的局部变量a就变成了静态变量,放在了静态区。放在静态区的数据创建后直到整个程序结束才释放。例2中当第一次调用完test函数后,第二次调用时,a此时的值为1,同时不会执行static int =0语句,而是直接执行a++语句。

总结:

  1. static修饰局部变量,局部变量变成静态变量,从而放在静态区。静态区的变量从创建后直到整个程序结束之后才释放。
  2. 通俗来讲,static修饰局部变量是改变了局部变量的生命周期,使其生命周期变长。
  3. 本质来讲,static修饰局部变量是改变了局部变量的储存位置。
  4. 注意static修饰局部变量,是改变了局部变量的生命周期,而不是作用域。  

 2、static修饰全局变量

  全局变量本身就具有的属性是外部链接属性。在不同的源文件中,要引用其他源文件的全局变量,只需要用extern关键字就行。但是当我们用static修饰全局变量后,在另一个源文件中引用时就会发现找不到外部符号,也就是不能再引用。如下图:

 总结:

  1. static修饰全局变量,使全局变量不在有外部连接属性。
  2. 通俗来讲,static修饰全局变量后,使全局变量只能在自己所在的源文件中使用,不能被其他源文件通过extern链接使用。
  3. static修饰全局变量使其作用域变小。

3、static修饰函数

  函数本身也是具有外部链接属性的。 在不同的源文件中,可以通过extern来引用其他源文件的函数。但是当static修饰函数时,其他源文件就不能过再引用。也就是使函数的外部链接属性变成了內部链接属性。

 总结:

  1. static修饰函数,使函数不在有外部连接属性。
  2. 通俗来讲,static修饰函数后,使函数只能在自己所在的源文件中使用,不能被其他源文件通过extern链接使用。

 结尾

  综上我们可以看出,static的作用还是挺大的。static修饰局部变量、全局变量、自定义函数时意义分别也是不同的。但是修饰全局变量、自定义函数时较为相似。

  希望以上内容对你有所帮助,感谢阅读。

  • 38
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Ggggggtm

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

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

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

打赏作者

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

抵扣说明:

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

余额充值