带你熟知关键字static用法

您所在的位置:网站首页 c语言switch的用法举例 带你熟知关键字static用法

带你熟知关键字static用法

2024-07-13 16:28| 来源: 网络整理| 查看: 265

引入

  首先我们看两个例子:

例1

#include void test() { int i = 0; i++; printf("%d", i); } int main() { int a = 0; while (a < 10) { test(); a++; } return 0; }

例2

#include void test() { static int i = 0; i++; printf("%d", i); } int main() { int a = 0; while (a < 10) { test(); a++; } return 0; }

   那么请问例1和例2的输出结果一样吗?答案是肯定不一样的。我们来看一下例1和例2分别输出的结果。

   为什么两个的输出结果不一样的,原因就是在static修饰了局部变量。接下来我们仔细分析一下原因。

一、static的简单认识 在c语言中,static是一个常见的关键字, 可用来修饰。static可修饰局部变量、全局变量、自定义函数。 二、static的具体用法 1、static修饰局部变量

  从刚开始我们引入的两个例子可以发现,例2中static修饰了局部变量。而修饰局部变量有什么意义呢?首先我们先来了解一下局部变量、静态变量等在内存中所储存的位置。

                                       

  我们都知道,局部变量进去作用域时创建,出了作用域就自动释放了。这也是例1打印出来10的一的原因。但是当static修饰局部变量时,例2中的局部变量a就变成了静态变量,放在了静态区。放在静态区的数据创建后直到整个程序结束才释放。例2中当第一次调用完test函数后,第二次调用时,a此时的值为1,同时不会执行static int =0语句,而是直接执行a++语句。

总结:

static修饰局部变量,局部变量变成静态变量,从而放在静态区。静态区的变量从创建后直到整个程序结束之后才释放。通俗来讲,static修饰局部变量是改变了局部变量的生命周期,使其生命周期变长。本质来讲,static修饰局部变量是改变了局部变量的储存位置。注意static修饰局部变量,是改变了局部变量的生命周期,而不是作用域。    2、static修饰全局变量

  全局变量本身就具有的属性是外部链接属性。在不同的源文件中,要引用其他源文件的全局变量,只需要用extern关键字就行。但是当我们用static修饰全局变量后,在另一个源文件中引用时就会发现找不到外部符号,也就是不能再引用。如下图:

 总结:

static修饰全局变量,使全局变量不在有外部连接属性。通俗来讲,static修饰全局变量后,使全局变量只能在自己所在的源文件中使用,不能被其他源文件通过extern链接使用。static修饰全局变量使其作用域变小。 3、static修饰函数

  函数本身也是具有外部链接属性的。 在不同的源文件中,可以通过extern来引用其他源文件的函数。但是当static修饰函数时,其他源文件就不能过再引用。也就是使函数的外部链接属性变成了內部链接属性。

 总结:

static修饰函数,使函数不在有外部连接属性。通俗来讲,static修饰函数后,使函数只能在自己所在的源文件中使用,不能被其他源文件通过extern链接使用。  结尾

  综上我们可以看出,static的作用还是挺大的。static修饰局部变量、全局变量、自定义函数时意义分别也是不同的。但是修饰全局变量、自定义函数时较为相似。

  希望以上内容对你有所帮助,感谢阅读。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3