[C/C++] 关键字static的用法总结

8 篇文章 0 订阅

关键字static主要有三个作用:

(1)静态局部变量

(2)静态外部变量

(3)静态函数(内部函数)

(4)类中的静态数据成员/静态成员函数

前两种C和C++都有,第三种仅在C++中有

一、静态局部变量

如果希望函数中的局部变量的值在函数调用结束后不消失而保留其值,即其占用的存储单元不释放,在下一次该函数调用时,该变量保留上一次函数调用结束时的值,这时就应该指定该局部变量为静态局部变量。

静态局部变量在静态存储区分配内存,在编译时赋初值,只赋初值一次(如果在定义时不赋初值,对静态局部变量,编译时自动赋初值0(对数值型变量)或空字符(对字符变量)),在程序运行时它已经有初值,在程序整个运行期间都不释放内存,以后每次调用函数时不再重新赋初值,而只是保留上一次函数调用结束时的值

使用场合:(1)需要保留函数上一次调用结束时的值(2)如果初始化后,变量只被引用而不改变其值,则这时用静态局部变量比较方便

二、静态外部变量

加上static声明、只能用于本文件的外部变量(全局变量)称为静态外部变量

三、内部函数

如果一个函数只能被本文件中其他函数所调用,它称为内部函数,又称静态函数。使用内部函数,可以使函数只局限于所在文件,如果不同的文件中有同名的内部函数,互不干扰,这样不同的人可以分别编写不同的函数,而不必担心所用函数名是否会与其他文件中的函数相同。

函数格式:static  类型标识符 函数名(形参表)

通常把只能由同一个文件使用的函数和外部变量放在同一个文件中,在它们前面都冠以static使之局部化,其他文件不能引用。与之相反的外部函数用extern关键字,表示此函数可以供外部文件调用。如果定义函数时省略extern,则默认为外部函数。

四、静态成员

静态数据成员:如果希望各对象中的数据成员的值是一样的,就可以把它定义为静态数据成员,它是属于类的,为各对象共有所有对象都可以引用它。

静态数据成员不属于某一对象,在为对象分配的空间中不包括静态数据成员所占的空间,它是在所有对象之外单独开辟的空间,在内存中只占一份空间,它不随对象的建立而分配空间,也不随对象的撤销而释放。

只要在类中指定了静态数据成员,即使不定义对象,也为静态数据成员分配空间,它可以被引用。

静态数据成员是在程序开始运行时被分配空间,到程序结束时才释放空间。

静态数据成员可以初始化,但只能在类外进行初始化。注意:不能用参数初始化表对静态数据成员初始化

如果未对静态数据成员赋初值,则编译系统会自动赋予初值0.

静态数据成员既可以通过对象名引用,也可以通过类名引用

静态成员函数:

与静态数据成员不同,静态成员函数不是为了对象之间的沟通,而是为了能处理静态数据成员。所以,静态成员函数只用来访问静态数据成员,而不访问非静态成员

静态成员函数同样是属于类的

static声明使变量采用静态存储方式,但它对局部变量和全局变量所起的作用不同。对局部变量来说,static使变量由动态存储方式改变为静态存储方式;而对全局变量,它使变量局部化(局限于本文件),但仍为静态存储方式。从作用域角度看,凡有static声明的,其作用域都是局限的,或者局限于本函数内(静态局部变量),或者局限于本文件内(静态外部变量)。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值