c学习-32 关键字static学习,静态局部变量和静态全局变量(在c语言中)

1. c语言-静态局部变量

1.1 测试代码 ( 静态局部变量的生命周期及作用域 )

void fun01_01_01(){
    int a01_01=0;
    static int b01_01=0;
    a01_01++; b01_01++;
    printf("a01_01=%d   ",a01_01);
    printf("b01_01=%d\n",b01_01);
}

/* 1. 静态局部变量的生命周期 */
void fun01_01(){
    fun01_01_01();
    fun01_01_01();
    fun01_01_01();
}

1.2 执行结果

1.3 作用域实验代码

void fun01_01_01(){
    int a01_01=0;
    static int b01_01=0;
    a01_01++; b01_01++;
    printf("a01_01=%d   ",a01_01);
    printf("b01_01=%d\n",b01_01);
}

/* 1. 静态局部变量的生命周期 */
void fun01_01(){
    fun01_01_01();
    fun01_01_01();
    fun01_01_01();
    printf("a01_01=%d   ",a01_01);
    printf("b01_01=%d\n",b01_01);
}

1.4 编译结果

1.5 分析

         静态局部变量在函数内定义,生存期为整个源程序;但作用域与局部变量相同,只能在定义该变量的函数内使用。退出该函数后, 尽管该变量还继续存在,但不能使用它。

2.  静态局部变量自动初始化为0 

2.1  测试代码

/* 2. 静态局部变量自动初始化为0 */
void fun01_02(){
    int a01_02;
    static int b01_02;
    printf("a01_02=%d   ",a01_02);
    printf("b01_02=%d\n",b01_02);
}

2.2 执行结果

2.3 理论分析

      对基本类型的静态局部变量若在说明时未赋以初值,则系统自动赋予0值。而对非静态局部变量不赋初值,则其值是不定的。

3.c语言-静态全局变量、全局变量

3.1 代码

/* test_01.h文件 */
extern int a01_03;

/* test_01.c文件 */
int a01_03=1;
static int b01_03=1;
void test01_03(){
    printf("a01_03=%d   ",a01_03);
    printf("b01_03=%d\n",b01_03);
}

/* main.c文件 */
int main(){
    test01_03();
    printf("in the main:  a01_03=%d\n",a01_03);
    // printf("b01_03=%d\n",b01_03);//静态全局变量,不可跨文件使用
    return 0;
}

3.2 执行结果

3.3 分析

普通全局变量:定义在函数外部;对整个工程可见,其他文件可以使用extern外部声明后直接使用(作用域,整个源程序);其他文件不能再定义一个与其相同名字的变量

静态全局变量:定义在函数外部;仅对当前文件可见,其他文件即便使用extern外部声明也不能使用(作用域,当前文件);其他文件可以再定义一个与其相同名字的变量

4. 总结

静态局部变量:作用域是函数内,生命周期整个源程序。

静态全局变量:作用域是当前文件,生命周期整个源程序。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值