关于static变量

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++;
  }

}

执行结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值