上一篇我们介绍了什么是变数的生命週期,也介绍了区域变数、全域变数是什么,希望大家有比较弄清楚了!
今天我们来延续上一篇提到的概念,继续看另一个变数--「静态变数」!
变数的生命週期
前一篇我们提到,变数会从被宣告的当下诞生,并且由记忆体分配一个位置给它,直到区块结束、程式结束而消失,而区域变数则是一离开所在区域则消失,全域变数则需程式结束才会消失。
接下来我们来介绍另一个有趣的变数--「静态变数」。
我们先来看一段程式码:
#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");}
看得出这是一个副函式内,宣告了一个的区域变数,随着每次进入副函式而重新宣告,而离开副函式会消亡。
但若今天将副函式中的变数改为静态变数的话:
#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");}
可以看到这个结果与上一次是大大的不相同了,离开副函式后静态变数并不会消失,而是保存下来直到下一次使用,所以我们才能看到第二次呼叫副函式时,变数延续了上次呼叫的改变的数值,而这就是静态变数最为不同的地方。
静态变数的使用
基本介绍一般来说我们平常宣告的区域变数,都是属于自动变数,即随着宣告区域决定生命週期的变数;但我们也能将区域变数加上「static」变成静态变数,使得它的生命週期改变,从使得该变数从宣告变数的当下开始,直到程式结束而消失,可以如同全域变数一般的长久存在。
如果对于变数比较与更详细介绍有兴趣的朋友,可以参考以下这个连结
痞客邦-C 语言:关于变数的二三事
宣告方法
其实就如同一般变数的宣告方式(如果对于变数宣告有疑惑可以参考第六篇),只是我们在最前面加上了「static」,就可以宣告它为静态变数。
实际应用
#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);}
小结
静态变数的生命週期由第一次宣告开始,直到程式结束而一起消失。
宣告静态变数时,只要在变数宣告最前面加上static。
由于静态变数由第一次宣告就一直存在,所以若初始化变数于宣告的同时,数值便不会再次初始化,而是保持变化后的数值。
当区域变数没有特别宣告为静态变数时会为自动变数,会自动决定生命週期。