C语言关键字static用法详解

概述

static的用法可总结为三点。
1,static修饰局部变量。
2,static修饰全局变量。
3,static修饰函数。
本文就static在c语言中的应用进行总结,供参考使用。错漏之处,请不吝指正。


1,static修饰局部变量

先给大家看一个程序。

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

这段代码的执行结果是:
在这里插入图片描述
原因:主函数中fun函数被调用十次,由于a是局部变量,进fun函数时a被创建,出函数时a被销毁。每次进入fun函数时a都要被重新创建,以此类推,就打印10个2的结果。


当用static修饰fun函数的局部变量a变量时。
void fun()
{
    
    
	static int a = 1;
	a++;
	printf("%d ", a);
}

此时的打印结果如下:
在这里插入图片描述
原因:static修饰局部变量a,使a创建一次,不再被销毁。static改变了局部变量a的生命周期,使它的生命周期变长,但是不改变它的作用域。 这就是static的第一个用法。

意义:在定义不需要与其他文件共享的全局变量时,加上static关键字能够有效地降低程序模块之间的耦合,避免不同文件同名变量的冲突,且不会误使用。

对变量的生命周期不太了解的小伙伴请看这篇文章(变量的作用域和生命周期)

2, static修饰全局变量

在这里插入图片描述
在add.c文件定义全局变量,在text.c文件中使用,编译不通过。当用extern声明过后程序能正常运行:
在这里插入图片描述
当用static修饰全局变量后:
在这里插入图片描述
全局变量是具有外部链接属性的,其他源文件可以通过链接使用,被static修饰的全局变量后,只能在自己的源文件内部使用。出了源文件就无法链接到。static将全局变量的外部链接属性改成了内部链接属性。

3,static修饰函数

static修饰函数和修饰全局变量类似,改变了函数的链接属性,使得函数的外部链接属性变成了内部链接属性,被修饰的函数只能在自己的源文件内部使用。
当用extern修饰另一个.c文件的函数是,程序运行成功:
在这里插入图片描述
当用static修饰外部函数时:
在这里插入图片描述

总的来说:

(1)static在修饰局部变量的时候,static 修饰的静态局部变量只执行初始化一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。

(2)static 修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是 extern 外部声明也不可以。

(3)static 修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。

猜你喜欢

转载自blog.csdn.net/qq_52208569/article/details/112910019