static int a = 0;
a++
这是函数内定义的,每次进这个函数内的变量a都是清零?
我这样给你说吧:
void fun(void){
a++;
}
第一次调用fun()函数,a=0;a++之后,a=1;
第二次在执行fun()函数的时候,a初始为1,a++之后,a=2;
第三次在执行fun()函数的时候,a初始为2,a++之后,a=3;
以此内推
不会清零的,局部静态变量或全局静态变量,会在程序运行期间一直存活。
对于函数内的静态变量,是用特殊区域来存储的,所以只有第一次使用函数时才初始化变量,后面的调用将不再初始化,而是直接用。
比如
int outA(){ static int a =0; // 这句声明同时初始化,只执行一次 a++; // 每次调用都执行 return a; } //所以 b=outA();//执行完后b=1 b=outA();//执行完后b=2 int outB(){ static int b; // 这句声明同时初始化,只执行一次 b=0; //这句话每次进入函数调用都会执行 b++; // 每次调用都执行 return b; } c=outB();//执行完后c=1 c=outB();//执行完后c=1,虽然调用中的b变量是静态的,但后面又专门赋值为0,所以执行下来,输出永远是1.