写单片机程序时遇到的问题,简化成下例之后。
情况一:
#include <stdio.h>
#include <stdlib.h>
void fun2(){
int a;
printf("a=%d\n",a++);
}
int main(void){
fun2();
fun2();
fun2();
fun2();
return 1;
}
运行结果:
情况二:
#include <stdio.h>
#include <stdlib.h>
void fun2(){
int a=0;
printf("a=%d\n",a++);
}
int main(void){
fun2();
fun2();
fun2();
fun2();
return 1;
}
运行结果:
情况二的结果我能理解,因为每次调用函数fun2时,都对变量a赋初值0,所以打印出的结果是a=0;
但是情况一没有对a赋初值,int型变量默认赋初值0,那么每次调用时,我认为的过程:首先声明一个变量a,没有赋值,默认值为0,打印a的值a=0;下一次调用同上。运行结果和情况二相同。
但是实际运行结果显示a保留了上一次的值,就像一个静态变量,请问这是为什么呢?