现在的位置: 首页 > 综合 > 正文

变量作用域3

2013年10月11日 ⁄ 综合 ⁄ 共 1080字 ⁄ 字号 评论关闭

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
作用域和连接针对空间上来将的那么时间上有存储时期来负责
存储时期:
1.静态
2.自动
静态是指他在程序运行时一直存在
具有文件作用域的变量具有静态存储时期,但是具有文件作用域的变量,关键子 static 表示连接类型

总上c变量的5中存储类
上述代码如果你调试的话:那么在调试时会跳过static int stay=1;这条语句的,而int fade=1不会跳过!
这说明静态变量(包括文件作用域变量和代码块加有static的变量),在程序加载入内存时,已经存在了

更多请看<<c primer  plus>>12章  

 存储类 时期 作用域 连接 声明方式
自动 自动 代码块 代码块内
寄存器 自动 代码块 代码块内,使用register
具有外部连接的静态变量 静态 文件 外部 所有函数之外
具有内部连接的静态变量 静态 文件 内部 所有函数之外,使用static
空连接的静态 静态 代码块 代码块内,使用static

静态: 一直存在,变量的位置固定不动
重点在具有代码块作用域的静态变量:例如 {static int a;.....}
在代码块中的 static int a ;
                    和 int b;
两者的不同在于初始化的不同

static 的变量,也就是a只在编译是初始化
而b在每次调用时都初始化

#include <stdio.h>


//////////////////////////////////////////////////////////////////////////
void Print(void)
{
    
int fade = 1;
    
static int stay = 1;
    printf(
"fade = %d and stay = %d ",fade++,stay++);
}


int main_scop=0;

int main()
{

    
for(int i=0;i<2;i++)
    
{
        Print();
    }


    
    
return 0;
}



调试时会跳过static int stay=1;的!!!!!
 
更多详看<<c primer plus>> 12章

【上篇】
【下篇】

抱歉!评论已关闭.