static变量的做用

在C语言中,关键字static的意思是静态的,有3个明显的做用:ios

1. 在函数体内,静态变量具备记忆做用,即一个被声明为静态的变量在这一函数被调用的过程当中其值维持不变。
2. 在模块内(但在函数体外),它的做用域范围是有限制的,若是一个变量被声明为静态的,那么该变量能够被模块内全部的函数访问,但不能被模块外的其余函数访问。
3. 内部函数应该在当前源文件中说明和定义,对于可在当前源文件之外使用的函数,应该在一个头文件中说明,使用这些函数的源文件要包含这个头文件。
 
static全局变量和普通全局变量的区别:static全局变量只初始化一次,这是为了防止它在其余文件单元中引用。
 
static局部变量和普通局部变量的区别:static局部变量只初始化一次,下次的运算依据是上一次的结果值。
 
static函数与普通函数的区别在与做用域不同,static()函数只在一个源文件中有效,不能被其它源文件使用。
 
静态数据成员的特色:
1. 对于非静态数据成员,每一个类都有本身的复制品。而静态数据成员被当作是类的成员。不管这个类的对象被定义了多少个, 静态数据成员在程序中也只有一份复制品,由该类型的全部对象共享访问。
2. 静态数据成员存储在全局数据区。定义时要分配空间,因此不能在类声明中定义。因为静态数据成员属于本类的全部对象共享,因此他不属于特的类对象,在没有产生类对象时,其做用域就可见,即在没有产生类的实例时,程序员也可使用它。
3. 静态数据成员也听从public、protect、private访问规则。
4. static成员变量的初始化在类外,此时不能再带上static的关键字。private、protect的static成员虽然能够在类外初始化,可是不能在类外被访问。
 
静态数据成员的优点:
1. 静态数据成员没有进入程序的全局名字空间,所以不存在与程序中其余全局名字冲突的可能性。
2.能够实现信息隐藏。静态数据成员可使private成员,而全局变量不能。
#include<stdio.h>
#include <iostream>
#include "a.h"
using namespace std;
void fun(int i)
{
    static int value = i++;
    cout<<value<<endl;
}
int main()
{
    fun(0);
    fun(1);
    fun(2);
    return 0;
}

运行结果: 0
运行结果: 0
运行结果: 0程序员

相关文章
相关标签/搜索