1.静态全局变量
#include<stdio.h>
static int Temp = 10;
void Test();
int main()
{
printf("Temp is %d
", Temp);//输出:10
Test();//输出:10
printf("Temp is %d
", Temp);//输出:11
return 0;
}
void Test()
{
Temp++;
}
特点:作用域在声明此变量的文件中,其他文件即使使用extern关键字修饰其声明也不可使用
2.静态局部变量
#include <stdio.h>
void Test();
int main()
{
for(int i=0; i<5; i++)
{
Test();
}
return 0;
}
void Test()
{
static Temp = 10;
printf("Temp is %d
", Temp);
Temp++;
}
特点:内存存放在 程序的全局数据区中;只会被初始化一次,其后运行到该对象的声明是不会再初始化;不能被其作用域之外的其他模块调用,其调用范围仅限于声明该变量的函数作用域当中。
3.静态数据成员
#include <stdio.h>
class TempClass
{
public:
TempClass(int a, int b, int c);
void Show();
private:
int a,b,c;
static int T;
}
int TempClass::T = 0;//初始化静态数据成员
TempClass::TempClass(int a, int b, int c)
{
this->a = a;
this->b = b;
this->c = c;
T = a + b + c;
}
void TempClass::Show()
{
printf("T is %d
", T);
}
int main()
{
TempClass ClassA(1,1,1);
ClassA.Show();//输出1+1+1 = 3;
TempClass ClassB(3,3,3);
ClassB.Show();//输出3+3+3 = 9;
ClassA.Show();//输出9
return 0;
}
特点:静态数据成员的服务对象是所有类实例化的对象;静态数据成员在对象产生之前就已被分配内存,内存存储 在全局数据区,随进程的消亡而消亡。
4.静态成员函数
#include <stdio.h>
class TempClass
{
public:
TempClass(int a, int b, int c);
static void Show();
private:
int a,b,c;
static int T;
}
int TempClass::T = 0; //初始化静态数据成员
TempClass::TempClass(int a, int b, int c)
{
this->a = a;
this->b = b;
this->c = c;
T = a + b + c;
}
void TempClass::Show()
{
printf("T is %d
", T);
}
int main()
{
TempClass ClassA(1,1,1);
ClassA.Show();
TempClass ClassB(3,3,3);
ClassB.Show();
TempClass::Show(); //注意此处的调用方式.
return 0;
}
特点:静态成员函数比普通成员函数多了一种调用方式;静态成员函数为整个类服务,而不是具体的一个类的实例服务;静态成员函数不可以操作类中的非静态成员。