c语言static关键字用法详解

 更新时间:2022年01月17日 08:47:23   作者:小白又菜  
大家好,本篇文章主要讲的是c语言static关键字用法详解,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

1.static修饰全局变量

我们创建两个源文件,一个test.c,一个main.c

现在我们在test.c文件下定义一个全局变量

int g_val = 100;

我们在main.c下进行调用打印g_val我们能访问到g_val吗?

答案是可以的

如果给g_val加上static修饰我们还能再main.c下访问到吗?

static int g_val = 100;

这时候答案是不行的!

 因此我们得到了static的第一个结论

结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。

2.static修饰函数

 我们在test.c文件下写一个show()函数,请问在main.c文件能调用吗?

 答案是可以的。

那这时候给show()函数加上static,main.c下还能调用该函数吗?

 

答案是不可以的!因此我们可以得到第二个结论

结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问,但是可以通过嵌套的方式调用,变相的封装的表现。

但是我们可以通过函数嵌套调用的方式调用show函数。

什么意思呢?就是在show函数的相同文件内创建一个新的函数,调用show函数,我们再在main.c文件下调用这个新的函数,已达到调用show()函数的目的。 

例:我们创建一个show_helper函数,来调用static修饰的show函数,我们再在main.c文件内调用show_helper函数。

 结果:

通过嵌套的方式调用,变相的封装的表现。

因此static项目维护,可以提供安全保护。被static修饰,主要限制的是作用域。

3.static修饰局部变量

void fun()
{
	int i = 0;
	i++;
	printf("i = %d\n", i);
}
 
int main()
{
	for (int i = 0; i < 10; i++)
	{
		fun();
	}
}

你知道这段代码,它的运行结果是什么吗?

通过结果我们发现他打印了10个1,其中,i是局部变量,具有临时性,函数调用时开辟空间并初始化,函数结束释放空间。

那么如果我们static修饰局部变量,即给int i  = 0;前static所修饰,结果还会一样吗?

void fun()
{
	static int i = 0;
	i++;
	printf("i = %d\n", i);
}
 
int main()
{
	for (int i = 0; i < 10; i++)
	{
		fun();
	}
}

 答案当然是不一样的, 我们发现,结果变成了1-10。因此我们可以得到第三个结论。

分析:

结论3:static修饰局部变量,更改该局部变量的生命周期。

生命周期:将临时变量的生命周期变成全局变量的生命周期。

作用域不变:作用域仍然是代码块内。

总结:

static:

结论1:static修饰全局变量,该变量只在本文件内被访问,不能在其他文件被直接访问。

结论2:static修饰函数,该函数只能在本文件内被访问,不能被其他文件访问。但是可以通过嵌套的方式调用,变相的封装的表现。

结论3:static修饰局部变量,更改该局部变量的生命周期。
生命周期:将临时变量的生命周期 -- 全局变量的生命周期。
作用域不变:作用域仍然是在本代码块内。

到此这篇关于c语言static关键字用法详解的文章就介绍到这了,更多相关c语言static关键字内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 带头结点单链表(详解)

    带头结点单链表(详解)

    这篇文章主要介绍了带头结点单链表 (详解),需要的朋友可以参考下
    2023-07-07
  • LoadLibrary深入案例详解

    LoadLibrary深入案例详解

    这篇文章主要介绍了LoadLibrary深入案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • 基于C语言实现猜数字游戏

    基于C语言实现猜数字游戏

    这篇文章主要为大家详细介绍了基于C语言实现猜数字游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-05-05
  • C++中的可移植性和跨平台开发教程详解

    C++中的可移植性和跨平台开发教程详解

    这篇文章主要为大家介绍了C++中的可移植性和跨平台开发教程详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • 设计模式中的备忘录模式解析及相关C++实例应用

    设计模式中的备忘录模式解析及相关C++实例应用

    这篇文章主要介绍了设计模式中的备忘录模式解析及相关C++实例应用,备忘录模式也经常被用来在命令模式中维护可以撤销(Undo)操作的状态,需要的朋友可以参考下
    2016-03-03
  • c++ 巧开平方的实现代码

    c++ 巧开平方的实现代码

    如果没有计算器,我们如何求2的平方根
    2013-05-05
  • C++中引用和const关键字介绍

    C++中引用和const关键字介绍

    大家好,本篇文章主要讲的是C++中引用和const关键字介绍,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-02-02
  • Qt如何实现输入框@联系人的@检测的示例

    Qt如何实现输入框@联系人的@检测的示例

    本文主要介绍了Qt如何实现输入框@联系人的@检测的示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • VC基于ADO技术访问数据库的方法

    VC基于ADO技术访问数据库的方法

    这篇文章主要介绍了VC基于ADO技术访问数据库的方法,较为详细的分析了VC使用ADO操作数据库的相关实现技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10
  • 纯C语言:折半查找源码分享

    纯C语言:折半查找源码分享

    这篇文章主要介绍了纯C语言:折半查找源码,有需要的朋友可以参考一下
    2014-01-01

最新评论