在c语言编写代码中,常见的static静态关键字用于修饰局部变量、修饰全局变量和修饰函数方法。本人也将从这三方面对static关键字的用法进行概要解释。
修饰局部变量
局部变量主要体现在函数方法里面的变量,咱这边直接上代码看区别:
①这个是不加static关键字修饰的局部变量:
②这个是加了static关键字修饰局部变量:
通过两组的对比不难发现,使用了static修饰局部变量后,sums函数方法在结束后,并未释放销毁局部变量x的值,一直保留存储着sums函数结束后x局部变量的最后的值,当main函数第一次循环进入sums函数后,打印x=0后,x自增1,此时x为1;当main函数第一次循环进入sums函数后,打印x=1后,x自增1,此时x为2,以此类推。这里通过变量存储的方式和生命周期解释一下为什么出现这样的情况:
我把尝试的代码放下面,可以自己去试一下:
#include<stdio.h>
#include<windows.h>
#include<math.h>
void sums(){
int x=0;
/*static int x=0;*/
printf("%d\n",x);
x++;
}
int main()
{
int a=0;
while(a<3){
sums();
a++;
}
return 0;
}
修饰全局变量
本人将用同一项目下两个不同的源文件来简述static修饰全局变量。
①未使用static修饰全局变量的情况:
②使用static修饰全局变量的情况:
使用static修饰全局变量出现问题,这里我们运行一下在sample源文件下可不可以打印变量a:
通过对比,可知static修饰全局变量,将全局变量的外部连接属性转变为内部连接属性,导致在同一项目下的其它源文件不能使用该源文件的全局变量,综上,static修饰全局变量使全局变量的使用范围变小(只能在当前源文件使用,不能被其它源文件使用)。
修饰函数
先说结论,static修饰函数使函数的使用范围变小(只能在当前源文件使用,不能被其它源文件使用),原因也是将函数的外部连接属性转变为内部连接属性,导致在同一项目下的其它源文件不能使用该源文件的函数。
①未使用static修饰全局变量的情况:
②使用static修饰全局变量的情况:
使用static修饰函数出现问题,这里我们运行一下在sample源文件下可不可以调用函数sums():
这无不表明一件事,static修饰函数和修饰全局变量用法大差不差。
标签:函数,局部变量,C语言,源文件,关键字,static,修饰,全局变量 From: https://blog.csdn.net/rzh554/article/details/137248636