c语言static关键字用法详解

  • 更新时间:2022-10-19 09:03:33
  • 编辑:敖新立

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关键字内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!

相关教程

  • C语言实现自动给QQ好友发窗口抖动

    这篇文章主要介绍了C语言实现自动给QQ好友发窗口抖动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2021-05-07

  • C语言多线程服务器的实现实例

    C语言多线程服务器的实现实例

    给网友们整理关于C语言的教程,这篇文章主要介绍了C语言多线程服务器的实现实例,文章用实例讲解的很清楚,有对这方面不太懂的同学可以参考下

    发布时间:2022-07-12

  • C语言中字符和字符串处理(ANSI字符和Unicode字符)

    给大家整理了关于C语言的教程,这篇文章主要介绍了C语言与C++中字符和字符串处理(ANSI字符和Unicode字符)的详细内容,非常的全面,这里推荐给大家,希望大家能够喜欢。

    发布时间:2022-09-14

  • C语言 实现归并排序算法

    C语言 实现归并排序算法

    为网友们分享了关于C语言的教程,这篇文章主要介绍了C语言 实现归并排序算法的相关资料,需要的朋友可以参考下

    发布时间:2022-06-26

  • C语言程序中对二叉树数据结构的各种遍历方式

    这篇文章主要介绍了举例讲解C语言程序中对二叉树数据结构的各种遍历方式,先序中序后序二叉树遍历几乎成了最老生常谈的数据结构基础知识,的朋友可以参考下

    发布时间:2021-05-22

  • 深度剖析C语言结构体

    给大家整理一篇关于C语言的教程,今天小编就为大家分享一篇关于深度剖析C语言结构体,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

    发布时间:2022-07-25

  • 利用C语言结构体实现通讯录

    为网友们分享了关于C语言的教程,这篇文章主要为大家详细介绍了利用C语言结构体实现通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

    发布时间:2022-06-15

  • C语言中指针 int *p=0;和int *p;*p=0;和”&“的关系和区别详解

    这篇文章主要介绍了C语言中指针 int *p=0;和int *p;*p=0;和”&“有什么关系和区别,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下

    发布时间:2022-04-13

  • 浅析C语言头文件和库的一些问题

    为网友们分享了关于C语言的教程,以下是对C语言中头文件和库的一些问题进行了详细的分析介绍,需要的朋友可以参考下

    发布时间:2022-06-23

  • 深入理解C语言指针

    为网友们分享了关于C语言的教程,关于指针,其是C语言的重点,C语言学的好坏,其实就是指针学的好坏。其实指针并不复杂,学习指针,要正确的理解指针

    发布时间:2022-06-22

用户留言