1. static全局变量和普通的全局变量区别:全局变量本身就是静态存储方式,存储方式没有什么区别。非静态全局变量的作用域是整个源程序,在程序的多个文件中都有效。但是静态之后,限制作用域。只在定义文件中有效。static全局变量只初始化一次,防止在其他文件单元中被引用;
2. static局部变量和普通的局部变量区别:static局部变量只初始化一次,下次使用上次的结果值;
3. 类内的static成员变量属于整个类,不能在类内进行定义,只能在类的作用域进行定义;
4. 类内的static成员函数属于整个类,不能包含this 指针,只能调用static成员成员函数,不能包含有非static类型的成员变量
代码部分:
#include <stdio.h>
#include <stdlib.h>
using namespace std;
//static 全局变量具有文件作用域。
//不同的源文件定义了相同名字的静态全局变量,它们也是不同的变量
static int int_static_global = 11;
class hello{
private :
int int_a;
int int_b;
static int int_class_static ;
const int int_const = 44; //必须初始化
public:
hello();
~hello();
void print_fun();
static void print_static_fun();
void print_fun(int );
void plus_one();
};
#include "static_code.h"
hello::hello() {};
hello::~hello() {};
void hello :: print_fun()
{
printf("print_fun:int_class_static is %d\n",int_class_static);//非静态成员函数可以调用静态成员变量
printf("print_fun:int_const is %d\n",int_const);
}
void hello :: print_static_fun() //定义不加static关键字;静态成员函数,不可以调用非静态成员变量
{
printf("print_static_fun:int_class_static is %d\n",int_class_static);
}
void hello :: print_fun(int a)
{
printf("print_fun(int a):a is %d\n",a);
}
void hello ::plus_one()
{
int_class_static++;
printf("plus_one():int_class_static is %d\n",int_class_static);
}
int hello ::int_class_static = 55; //静态成员变量,不能在类内定义,在类的作用域定义
int main(int argc,char*argv[])
{
hello hello_object;
hello_object.print_fun();
int_static_global = 22;
hello_object.print_fun(int_static_global);
hello_object.plus_one();
hello_object.print_static_fun();
for(int j=0;j<5;j++)
{
static int int_static_for = 1;
int int_for = 1; //static局部变量只初始化一次,下次使用上次的值;
printf("int_static_for is %d,int_for is %d\n",int_static_for,int_for);
int_static_for++;
}
}
执行结果: