菜鸟笔记
提升您的技术认知

c 中的static关键字大揭秘-ag真人游戏

静态全局变量

特性

1. 存放空间:存放在全局数据区  从声明时开始初始化main函数结束销毁
2. 初始化:如果没有初始化则会被默认初始化为0 在首次用到时进行初始化
3. 作用域:作用域为整个源文件,
4. 区别:和全局变量的区别是 静态全局只在声明它的整个文件有效
	 而在文件之外是不可见的  而全局变量是文件之间共享的

例子

#include
using namespace std;
static int n;  //定义静态全局变量
void fn()
{ 
    n;
    cout<<n<<endl;
}
int main(void)
{ 
    n = 20;
    cout<<n<<endl;
    fn();
    return 0;
}

静态局部变量

特性

1. 存放空间:存放在全局数据区  从声明时开始初始化main函数结束销毁
2. 初始化:如果没有初始化则会被默认初始化为0 在首次用到时进行初始化
3. 作用域:作用域为整个函数内部,
4. 区别:通常但随着程序退出函数体,系统就会收回栈内存,
					局部变量也相应失效。
  			但有时候我们需要在两次调用之间对变量的值进行保存。
  			通常的想法是定义一个全局变量来实现。但这样一来,
 	 		变量已经不再属于函数本身了,
 	 		不再仅受函数的控制,给程序的维护带来不便。

例子

#include
using namespace std;
void fn();
int main(void)
{ 
    fn();
    fn();
    fn();
    return 0;
}
void fn()
{ 
    static int n = 10;
    cout<<n<<endl;
    n;
}

静态函数

特性

静态函数只是在声明他的文件当中可见,不能被其他文件所用。

静态成员变量

特性

1.存放空间:存在全局数据区
						不管定义多少个类对象,静态数据成员都共享分配在全局数据区的内存,所以节省了存储空间。
2.初始化:静态局部变量必须初始化 如果没有初始化会出现未定义引用的错误 而且必须在类外初始化
			.静态成员变量在类中仅仅是声明,没有定义,编译器暂时不会给它分配内存
			所以要在类的外面定义,实际上是给静态成员变量分配内存。
  		静态数据成员初始化的格式:<数据类型><类名>::<静态数据成员名>=<值>
3.作用域:
		静态成员变量从类被加载开始到类被卸载,一直存在;
		普通成员变量只有在类创建对象后才开始存在,对象结束,它的生命期结束;
		静态成员变量是全类共享;普通成员变量是每个对象单独享用的;
		一旦某变量需要改变时,只要改变一次,则所有存款类对象的该变量全改变过来了。
		
4.区别: 
		静态成员变量和全局变量的区别:
		同全局变量相比,使用静态数据成员有两个优势:
	(1)静态数据成员没有进入程序的全局名字空间,因此不存在与程序中其他全局名字冲突的可能性;
	(2)可以实现信息隐藏。静态数据成员可以使private成员,而全局变量不能。
5.访问方式:
		(1)可以通过类名直接访问变量
		(2)可以通过对象名访问比变量

实例

静态成员函数

特性

1.作用域:全类共享
2.调用限制:不包含this指针 只能调用静态成员 不能调用普通成员
3.调用方式:静态成员函数主要为了调用方便不用生成对象就能调用

实例

网站地图