Evo. G Tech Team Forum
Welcome to Evo. G Tech Team Forum. We have moved to a new website : www.evogtechteam.com

Thanks you.

by Evo. G Tech Team Management.

Join the forum, it's quick and easy

Evo. G Tech Team Forum
Welcome to Evo. G Tech Team Forum. We have moved to a new website : www.evogtechteam.com

Thanks you.

by Evo. G Tech Team Management.
Evo. G Tech Team Forum
Would you like to react to this message? Create an account in a few clicks or log in to continue.

static变量和全局变量

Go down

static变量和全局变量 Empty static变量和全局变量

Post by too wei September 26th 2015, 18:19

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
Sponsor

Posts : 31
Points : 66331
Reputation : 0
Join date : 2015-04-21
Age : 25
Location : Johor

Back to top Go down

Back to top


 
Permissions in this forum:
You cannot reply to topics in this forum