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文件中有效。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值