static变量和全局变量
Page 1 of 1
static变量和全局变量
static的作用
-隐藏(变量和函数受用)
当我们同时编译多个文件时,没加static前缀的全局变量和函数都具有全局可见性(其他源文件也能访问)
使用static了后,只有在当前文件具有可见性,就是只有在当前文件可以使用该变量或函数,所以在不同的文件中定义同名函数和同名变量也不会发生命名冲突
尤其是当许多由不同的程序员所写的源文件同时被包含使用时,特别容易发生命名冲突。这时,使用static全局变量是个不错的选择之一
static变量和全局变量都是储存在静态存储区,因此static变量和全局变量都能保持变量内容的持久和默认初始化为0
-保持变量内容的持久(变量受用):
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,过后就不会再初始化了
-默认初始化为0(变量受用):
这个就不解释了,实在不行就运行看看代码,我们对上面的代码进行了点修改
在这里我们可以发现到普通全局变量和static全局变量的差别:
-普通全局变量或函数在所有源文件都可使用
-static全局变量或函数只有在当前文件可使用,这防止了命名冲突
-隐藏(变量和函数受用)
当我们同时编译多个文件时,没加static前缀的全局变量和函数都具有全局可见性(其他源文件也能访问)
使用static了后,只有在当前文件具有可见性,就是只有在当前文件可以使用该变量或函数,所以在不同的文件中定义同名函数和同名变量也不会发生命名冲突
尤其是当许多由不同的程序员所写的源文件同时被包含使用时,特别容易发生命名冲突。这时,使用static全局变量是个不错的选择之一
static变量和全局变量都是储存在静态存储区,因此static变量和全局变量都能保持变量内容的持久和默认初始化为0
-保持变量内容的持久(变量受用):
存储在静态数据区的变量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化,过后就不会再初始化了
- Code:
int func(void)
{
static int count = 10; // 这句只有在一开始时和全局变量一起初始化,过后就不会再运行这里了,不明白的话debug看看
return count--;
}
int count = 1;
int main(void)
{
cout<<"Global\tLocal"<<endl;
for(; count <= 10; ++count)
cout<<count<<"\t"<<func()<<endl;
return 0;
}
-默认初始化为0(变量受用):
这个就不解释了,实在不行就运行看看代码,我们对上面的代码进行了点修改
- Code:
int func(void)
{
static int count; //自动初始化为0
return count--;
}
int count = 1;
int main(void)
{
cout<<"Global\tLocal"<<endl;
for(; count <= 10; ++count)
cout<<count<<"\t"<<func()<<endl;
return 0;
}
在这里我们可以发现到普通全局变量和static全局变量的差别:
-普通全局变量或函数在所有源文件都可使用
-static全局变量或函数只有在当前文件可使用,这防止了命名冲突
too wei- Sponsor
- Posts : 31
Points : 66331
Reputation : 0
Join date : 2015-04-21
Age : 25
Location : Johor
Page 1 of 1
Permissions in this forum:
You cannot reply to topics in this forum
|
|