在c语言中static关键字的作用,c++中的static关键字
c有很多关键词,大部分用起来很清楚,但也有一些相对复杂。我们这里要解释的static关键字就是这种情况。它的功能非常强大,相应的使用也比较复杂。
一般来说,static关键字的常用方式有三种:一种是用作局部变量的修饰符;二是用作全局变量修饰符;三用作功能修饰语。在本文下面的描述中,我们将详细分析这三种用法。
1,用于局部变量的修改。
使用static修改局部变量时,通常在函数体中,只能在函数内部调用。但是,这样定义的变量通常被称为局部静态变量,其值不会在函数调用结束时被清除。相反,当再次调用该函数时,其值将是上次调用后的值。
例如,我们定义以下两个变量var1和var2:
无效函数(void)
{
int var1
静态int var2
}在上面的例子中,变量var1是局部变量,变量var2是静态局部变量。因此,函数被调用后,变量var1的值将被清除,而变量var2的值将被保留。如果我们多次调用该函数,变量var1每次都会重新初始化,但变量var2的值不会。这个功能的作用是什么?我们可以用它来实现计数之类的累加运算。
最后,让我们总结一下静态局部变量的特点:
存放位置:在静态存放区。当使用static修改局部变量时,它改变了局部变量的存储位置,从原来的堆栈存储变为静态存储区。初始化:未初始化的局部静态变量会被程序自动初始化为automatic对象的值是任意的,除非为了初始化而显示)。作用域:作用域仍然是局部作用域,当定义它的函数或语句块结束时,作用域也就结束了。但是,在离开作用域之后,静态局部变量并没有被销毁,而是仍然驻留在内存中,直到程序结束,只是我们不能再访问它了。需要注意的是,静态局部变量的值在函数被调用后不会被破坏,所以不能重新进入带有静态局部变量的函数。因此,最好谨慎使用静态局部变量。
2.它用于修饰全局变量。
关键字static也可以用来修改全局变量,全局变量是模块中的变量,但不属于任何函数。这样的变量通常被称为静态全局变量。模块中的所有函数都可以访问这样的变量,但其他模块中的函数不能。
那么定义这样一个静态局部变量有什么用呢?我们认为最明显的优势主要有两点:
它是一个模块中的变量,防止被其他模块访问和修改,因为有时候我们不希望它被别人访问。另一方面,由于有效区域的限制,同名的变量可以在其他模块中使用而不冲突,使得软件编写更加方便。最后,我们还想总结一下静态全局变量的特点,尤其是它们的作用域,可以和静态局部变量相比较:
存储位置:内存中类似静态局部变量的静态存储区域,在整个程序运行过程中,静态存储区域始终存在。初始化:未初始化的局部静态变量会被程序自动初始化为0,而automatic object的值是任意的,除非显示为已初始化。作用域:一个静态全局变量在声明它的模块之外是不可见的,所以它的作用域是在它的模块中,更具体地说,是从定义到模块的末尾。所以当我们用static来修饰一个全局变量的时候,它把全局变量的作用域限制在声明它的模块,但是不改变它的存储位置,它还是在静态存储区。
3.用于功能装饰。
关键字static也可以用来修饰一个函数,我们称之为静态函数。在模块内,声明为static的函数只能被模块内的其他函数调用,也就是说,这个函数的应用范围仅限于声明它的模块。
定义一个静态函数就是在函数的返回类型前添加static关键字。一般函数的定义和声明默认为extern,但是静态函数只在声明它们的模块中可见,不能被其他模块调用。如下定义静态函数:
静态无效函数(void)
{
//函数体
}那么定义静态函数有什么好处呢?与静态全局变量一样,我们认为最明显的优势主要有两点:
有一点是静态函数是局部函数,不能被其他模块的函数调用,所以封装模块的一些内部属性的函数比较方便。另一方面,由于有效区域的限制,同名的函数可以在其他模块中使用,不会发生冲突,使得软件编写更加方便。4.摘要
这里讨论的是static关键字,它最大的优点是可以封装数据和操作,实际上限制了数据和函数的范围。可能有人会问,限制行动范围有什么用?
首先,它可以将所需的属性和操作信息传递给用户,并限定数据和操作的范围。
其次,它隐藏了一些不必要的需要向公众公开的信息,使来电者更加清楚其特征,使通话更加安全。
此外,模块的封装更好,结构更紧凑和优化。
事实上,在面向对象的语言中,也是基于这种思想来封装对象的属性和操作,并注意私有和公共的属性和操作,但它更完整。
欢迎关注:
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。