上一篇我们介绍了什麽是变数的生命周期,也介绍了区域变数、全域变数是什麽,希望大家有比较弄清楚了!
今天我们来延续上一篇提到的概念,继续看另一个变数--「静态变数」!
前一篇我们提到,变数会从被宣告的当下诞生,并且由记忆体分配一个位置给它,直到区块结束、程序结束而消失,而区域变数则是一离开所在区域则消失,全域变数则需程序结束才会消失。
接下来我们来介绍另一个有趣的变数--「静态变数」。
我们先来看一段程序码:
#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");
}
可以看到这个结果与上一次是大大的不相同了,离开副函式後静态变数并不会消失,而是保存下来直到下一次使用,所以我们才能看到第二次呼叫副函式时,变数延续了上次呼叫的改变的数值,而这就是静态变数最为不同的地方。
如果对於变数比较与更详细介绍有兴趣的朋友,可以参考以下这个连结
痞客邦-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。
由於静态变数由第一次宣告就一直存在,所以若初始化变数於宣告的同时,数值便不会再次初始化,而是保持变化後的数值。
当区域变数没有特别宣告为静态变数时会为自动变数,会自动决定生命周期。
>>: 纯Javascript,使用new Date()制作date picker
事情在好起来之前,总会先变很坏,然後才会慢慢的变好。在经历这些过程後,记得要把失去的补回来,把得到的...
做完了这几天的JAVA分享。。。我说是分享啦,因为我没有厉害到可以教别人 恩,所以做完分享之後,我也...
案例说明及适用场景 所有的公司都需要人事、薪资及差勤,但大部份的系统都独立在外 一方面是人资系统确实...
做有意义的事,不要便宜行事 Pursue what is meaningful (not what...
今天是铁人赛最後一天 我把之前所整理的资料来源一并附上 有些功能其实已经想好大概怎麽实现了,但在30...