`
younglibin
  • 浏览: 1190386 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

static变量的初始化,生存期,作用域

阅读更多

1、 初始化。

全局static变量的初始化在编译的时候进行。在main函数被调用之前初始化,并且,只初始化一次

函数static变量在函数中有效,第一次进入函数初始化。以后进入函数将沿用上一次的值。

2、 生存期。

生存期,main第一次执行,直到程序结束。比如下代码:

#include <stdio.h>

#include <stdlib.h>
int main()
{

if(true)

       {

              static int m=10;

       }

int c=0;

return 0;
}

尽管m变量在函数内部定义。但是它的生存期直到main函数执行完才结束。而非出了if语句的括号函数就结束。这是因为static变量不是存放在堆栈中的,而是存放在全局静态数据区中。

1、 作用域。

如果在{}中定义了static变量,则其作用域为{}内。例如上面的m变量就只能在{}内访问。如果有如下的代码:

#include <stdio.h>

#include <stdlib.h>
int main()
{

if(true)

       {

              static int m=10;

       }

int c=0;

printf("%d",m);

return 0;
}

将在printf报错:“error C2065: 'm' : undeclared identifier”。指示该变量没有定义。

如果static变量定义为全局的。则其拥有文件作用域:只在声明的文件中有效,其他源文件中不可见;同时有了static的生命周期。

如下:

//source.cpp

#include <stdio.h>

#include <stdlib.h>

int m=3;
int main()
{

if(true)

       {

              m=10;

       }

int c=0;

printf("%d",m);

return 0;
}

static变量在source.cpp文件中有效。

\

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics