全局变量,静态变量,局部变量的理解

1、静态全局变量
   
在全局变量前面加上static,该变量就成了一个静态全局变量。静态全局变量有如下特点:
    1
)、变量存储在全局数据区;
    2
)、变量会被自动初始化为0
    3
)、静态全局变量在整个编译单元(整个文件)内都是可见的,而在文件之外是不可见的。

// file1.cpp    
#include <iostream>    
using   namespace  std;   
static   int  n = 1;   
void  fun2();   
void  fun1() {   
    cout << n << endl;   
}   
int  main() {   
    fun1();   
    fun2();   
    return  1;   
}   
//view plain copy to clipboard print ? 
// file2.cpp    
#include <iostream>    
using   namespace  std;   
extern   int  n;   
void  fun2() {   
    cout << n << endl;   
}   

以上的代码无法通过编译。

2、静态局部变量
    在函数体内定义一个局部变量,变量被存储在堆栈中,函数返回后堆栈被恢复变量就被释放了。但是静态局部变量和静态全局变量相同,都是保存在全局数据区,在没有被显式初始化的情况下也会被初始化为0,函数返回后仍然有效,函数重入后数据依然是上次的结果,这和全局变量有相同的效果,但是全局变量不只是属于函数本身,其他代码也能看到很容易破坏变量的内容,所以静态局部变量在某些需要保存函数运行状态的时候很有用。

#include <iostream>
using namespace std;
void fun() {
 static int n = 1;
 cout << n << endl;
 n++;
}
int main() {
 fun();
 fun();
 fun();
 return 1;
} 

输出为:

1

2

3

3、全局变量

声明于函数体外,生存期从声明处至程序结束,但在不同文件中用extern说明。

// file1.cpp    
#include <iostream>    
using   namespace  std;   
int  n = 1;   
void  fun2();   
void  fun1() {   
    cout << n << endl;   
}   
int  main() {   
    fun1();   
    fun2();   
    return  1;   
}   

//view plain copy to clipboard print ? 
// file2.cpp    
#include <iostream>    
using   namespace  std;   
extern   int  n;   
void  fun2() {   
    cout << n << endl;   
}   

4.类的静态成员函数
    类的静态成员函数与静态成员变量一样,属于类而不属于对象。一般类的成员函数都有一个隐含的this指针当做参数,这样函数就可以访问对象的成员变量,但是静态成员函数没有这个参数,所以静态成员函数不能访问对象的成员变量,而只能访问其他静态成员。下面是使用静态成员函数的例子:

#include <iostream>
using namespace std;
class A {
 int n;
 static int m;
public:
 void fun1() {
  // 一般函数可以调用静态和非静态成员,无特殊限制
  cout << n + m << endl;
  fun2();
 }
 static void fun2() {
  cout << m << endl;
  
  //错误:静态成员函数不能调用非静态成员
//cout << n << endl; 
//fun1(); 
}
};
int main() 
{ A a;
 A::fun2(); 
a.fun1(); 
a.fun2();
}



 

 


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值