1.静态全局变量
#include<stdio.h> static int Temp = 10; void Test(); int main() { printf("Temp is %d\n", Temp);//输出:10 Test();//输出:10 printf("Temp is %d\n", 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\n", 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\n", 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\n", T); } int main() { TempClass ClassA(1,1,1); ClassA.Show(); TempClass ClassB(3,3,3); ClassB.Show(); TempClass::Show(); //注意此处的调用方式. return 0; }
特点:静态成员函数比普通成员函数多了一种调用方式;静态成员函数为整个类服务,而不是具体的一个类的实例服务;静态成员函数不可以操作类中的非静态成员。