版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
一直对static关键字不是很明白什么意思,看了上面那位博主的,记录并总结下,省得我忘了
一,面向过程设计的
1,静态全局变量,
(1),在全局数据区分配内存(这点和全局变量是一样的)
(2),没有初始化的静态全局变量会被自动初始化为0
(3),只能在本文件只使用,假如是一个全局变量,则其他文件可以通过extern关键字来使用,而静态全局变量不可以
2,静态局部变量
(1),在全局数据区分配内存(重点)
(2),若是反复调用静态局部变量所在的函数,那么只在第一次调用的时候进行初始化,在初始化的基础上对静态局部变量进行 处理,如加减乘除,十分试用于数据的累计处理,如累加,累乘等(这点十分类似于全局变量)
(3)如果没有显示初始化,会被自动初始化为0
(4)始终驻留在全局数据区,知道程序运行结束
(5)静态局部变量既有全局变量的优点,又使他受函数的控制,方便程序的模块化管理,维护
3,静态函数
只能在声明他的文件中使用,不能被其他文件使用
二,面向对象设计的
1,静态数据成员
(1)一个类的所有对象的非静态数据成员都会分配内存,而静态数据成员只分配一次内存,也就是说,一个类的所有对象共享该静态数据成员的内存
(2)静态数据成员储存在全局数据区内,多个对象共享访问
(3)分配内存空间只能在定义处(一定不能少定义),类中只能声明
<数据类型> <类名>::<静态数据成员>=<值>
(4)因为所有对象调用的时候是访问同一个内存,那么可以直接调用,不需要经过对象进行调用(需要能够访问,如需要public类型
<类名> ::<静态数据成员>
(5)如果改变了值,那么下个对象再次调用的时候值已经发生改变,同全局变量
(6)但是相比全局变量实现了信息的隐藏
2,静态成员函数
(1)不能访问非静态成员函数和非静态数据成员,非静态可以访问静态,静态之间可以互相访问
(2)可以不通过对象调用,
<类名>::<静态成员函数名>(<参数表>)
(3)类体外定义不能指定static,只在声明的时候指定static关键字