0


C语言学习查漏补缺之关键字static

一:什么是static

static意为“静态的”,在我们常见的计算机语言中(如C,C++,Java等,本文只针对C语言)作为关键字和函数出现。

二:static的作用与用法

1、修饰局部变量

2、修饰全局变量

3、修饰函数

在了解之前,我们先得知道C语言分区

下面将配合例子来一同解释

修饰局部变量

上述代码的运行结果为什么是十个1而不是1~10?

由while引导的条件循环语句共执行十次,所以自定义函数test()被调用、执行运算十次。但test()中的变量x是局部变量,每次进入局部范围被创建,出范围被销毁,所以每次执行程序都会有个值为0的临时变量“x“,++后值变成1最后被打印出来。而不是循环十次,x++一直加到10。

但是如果想打印出1~10,怎么办?

只需在定义变量x前加一个“static”修饰局部变量。被修饰后的变量并没有放进“栈区”而是被放进了静态区,放入静态区的数据创建后直到程序结束才释放。此时的临时变量x,不会每次在test()运行完后出作用域而被释放,而是再每次执行函数后保留x++后的数据。

本质上,static的修饰改变了局部变量的存储位置,因为存储位置的差异,使得执行效果不一样。

可以简单的理解为,static改变了局部变量的生命周期

但是static不会改变变量的作用域

x的作用域依然只是在test()自定义函数的大括号里

修饰全局变量

上例子

众所周知,全局变量的作用域很大,大到整个程序,且具有外部链接属性。文件A.c定义了一个全局变量int a;,在文件B.c中可通过声明进行外部引用 extern int a;引用。

如果对全局变量进行修饰,会有什么效果?

此时,全局变量a被static修饰,外部连接属性变成了内部链接属性,这个全局变量只能在自己所在的源文件(例如上图的bianliang.c)内部使用。static改变了全局变量的作用域,使其作用域变小。

修饰函数

咱们来随便写个交换函数

在另一个源文件定义一个自定义函数swap(),通过extern外部引用,这样swap()也可在第一个源文件中被调用。

那么,对函数进行修饰,会怎样?

函数本身具有外部链接属性的,被static修饰之后,外部链接属性就变成了内部链接属性,使得这个函数只能在自己所在的源文件内部使用,其他源文件无法使用,限制了作用域。(情况和static修饰全局变量相似)

三:总结

总的来说,当局部变量被static修饰时它的生命周期会变得和整个程序一样长,但其作用域并没有发生变化。而当static修饰全局变量和函数时,变量/函数只能在该源文件内部使用,外部无法调用。


本文转载自: https://blog.csdn.net/qq_64690314/article/details/127422316
版权归原作者 八尺兔子 所有, 如有侵权,请联系我们删除。

“C语言学习查漏补缺之关键字static”的评论:

还没有评论