【从零开始的 C 语言笔记】第二十七篇-变数的生命週期(2)

上一篇我们介绍了什么是变数的生命週期,也介绍了区域变数、全域变数是什么,希望大家有比较弄清楚了!

今天我们来延续上一篇提到的概念,继续看另一个变数--「静态变数」!


变数的生命週期

前一篇我们提到,变数会从被宣告的当下诞生,并且由记忆体分配一个位置给它,直到区块结束、程式结束而消失,而区域变数则是一离开所在区域则消失,全域变数则需程式结束才会消失。

接下来我们来介绍另一个有趣的变数--「静态变数」。

我们先来看一段程式码:

#include <stdio.h>void test(int);int main(){    test(3);    test(2);    return 0;}void test(int times){    int x = 0;    for(int i = 0; i<times; i++){        printf("%d\n", x);        x++;    }    printf("----------\n");}

http://img2.58codes.com/2024/20142565KvzhrxiifD.png
看得出这是一个副函式内,宣告了一个的区域变数,随着每次进入副函式而重新宣告,而离开副函式会消亡。

但若今天将副函式中的变数改为静态变数的话:

#include <stdio.h>void test(int);int main(){    test(3);    test(2);    return 0;}void test(int times){    static int x = 0;    for(int i = 0; i<times; i++){        printf("%d\n", x);        x++;    }    printf("----------\n");}

http://img2.58codes.com/2024/201425658siGMVKUqO.png
可以看到这个结果与上一次是大大的不相同了,离开副函式后静态变数并不会消失,而是保存下来直到下一次使用,所以我们才能看到第二次呼叫副函式时,变数延续了上次呼叫的改变的数值,而这就是静态变数最为不同的地方。


静态变数的使用

基本介绍
一般来说我们平常宣告的区域变数,都是属于自动变数,即随着宣告区域决定生命週期的变数;但我们也能将区域变数加上「static」变成静态变数,使得它的生命週期改变,从使得该变数从宣告变数的当下开始,直到程式结束而消失,可以如同全域变数一般的长久存在。

如果对于变数比较与更详细介绍有兴趣的朋友,可以参考以下这个连结
痞客邦-C 语言:关于变数的二三事

宣告方法
其实就如同一般变数的宣告方式(如果对于变数宣告有疑惑可以参考第六篇),只是我们在最前面加上了「static」,就可以宣告它为静态变数。
http://img2.58codes.com/2024/20142565XJnkAy8IvA.png

实际应用

#include <stdio.h>void countNumber(int);int main(){    int input = 0;    printf("新增人次: ");    while(scanf("%d", &input)!=EOF){        countNumber(input);        printf("新增人次: ");    }    return 0;}void countNumber(int num){    static int total = 0;    total = total+num;    printf("乐园累积旅游人次: %d\n\n", total);}

http://img2.58codes.com/2024/20142565W3a8ePoe4y.png


小结

静态变数的生命週期由第一次宣告开始,直到程式结束而一起消失。

宣告静态变数时,只要在变数宣告最前面加上static。

由于静态变数由第一次宣告就一直存在,所以若初始化变数于宣告的同时,数值便不会再次初始化,而是保持变化后的数值。

当区域变数没有特别宣告为静态变数时会为自动变数,会自动决定生命週期。


看到这里我们就学完变数的概念了,如果有疑惑可以再看看之前的第六篇、上一篇等等,或上网看看更详细的资料!

下一篇我们来看看变数的延伸--「Struct」!


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章