c语言static是什么意思

Z, ZLW 28831

c语言static意思是静态变量。static指修饰符,可以用来修饰变量,也可以用来修饰函数。如果是在函数外面定义的,那么static说明的变量可以在当前c程序文件中使用。如果是在函数内部定义的,那么这个变量只初始化一次,即使再次调用这个函数,这个static变量也不会再次被初始化。

一、 static概述

Static,顾名思义是静态、静止的意思,个人理解的含义是私有、静态。

私有就是隐藏。

  • static函数只能声明后的本文中调用
  • static全局变量只能声明后的本文中调用
  • static局部变量只能声明后的本函数调用

静态就是一直存在,相对于每次调用动态分配而言。

  • static函数(未验证是否每次调用代码地址都是一致的)
  • static全局变量生命周期到程序或进程结束;
  • static局部变量生命周期到程序或进程结束。

二、static的好处是什么?

隐藏变量或函数、隔离错误,有利于模块化程序

在编程中,难免会用到全局变量,全局变量的作用域是整个源程序,当一个源程序由多个源文件组成时,全局变量在所有的源文件中都是有效的。如果希望全局变量仅限于在本源文件中使用,在其他源文件中不能引用,也就是说限制其作用域只在定义该变量的源文件内有效,而在同一源程序的其他源文件中不能使用,这时,就可以通过在全局变量上加static来实现,使全局变量被定义成一个静态全局变量。这样就可以避免其他源文件使用该变量、避免其他源文件因为该变量引起的错误。起到了对其他源文件隐藏该变量和隔离错误的作用,有利于模块化程序。

保持变量内容的持久性

有时候,我们希望函数中局部变量的值在函数调用结束之后不会消失,仍然保留函数调用结束的值。即它所在的存储单元不释放。这时,应该将该局部变量用关关键字static声明为静态局部变量。当局部变量被声明为静态局部变量的时候,也就改变了局部变量的存储位置,从原来的栈中存放改为静态存储区存放,全局变量也存放在静态存储区,静态局部变量与全局变量的主要区别就在于可见性,静态局部变量只在其被声明的代码块中是可见的。

默认初始化为 0

其实全局变量也具备这一属性,因为全局变量也存储在静态数据区。在静态数据区,内存中所有的字节默认值都是 0x00,某些时候这一特点可以减少程序员的工作量。比如初始化一个稀疏矩阵,我们可以一个一个地把所有元素都置 0,然后把不是 0 的几个元素赋值。如果定义成静态的,就省去了一开始置 0 的操作。再比如要把一个字符数组当字符串来用,但又觉得每次在字符数组末尾加 \0 太麻烦。如果把字符串定义成静态的,就省去了这个麻烦,因为那里本来就是 \0 。

三、static的使用和作用

静态全局变量

使用:全局变量前加static,修饰全局变量为静态全局变量。

作用:改变全局变量的可见性。静态全局变量的存储位置在静态存储区,未被初始化的静态全局变量会被自动初始化为0。静态全局变量在声明它的文件之外是不可见的,仅在从定义该变量的开始位置到文件结尾可见。

静态局部变量

使用:局部变量前加static,修饰局部变量为静态局部变量。

作用:改变局部变量的销毁时期。静态局部变量的作用域和局部变量的作用域一样,当定义它的函数或语句块结束的时候,作用域结束。不同的是,静态局部变量存储在静态存储区,当静态局部变量离开作用域后,并没有被销毁。当该函数再次被调用的时候,该变量的值为上次函数调用结束时的值。

静态函数

使用:函数返回类型前加static,修饰函数为静态函数。

作用:改变函数的可见性。函数的定义和声明在默认情况下都是extern的,但静态函数只在声明它的文件中可见,不能被其他文件使用。

类的静态成员

使用:类成员前加static,修饰类的成员为类的静态成员。

作用:实现多个对象之间的数据共享,并且使用静态成员不会破坏封装性,也保证了安全性。

类的静态函数

使用:类函数前加static,修饰类的函数为静态函数。

作用:减少资源消耗,不需要实例化就可以使用。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部