C语言问题,麻烦解释下,为什么答案算出来是1,3不是3,1啊?

main()
{
int i,m,n;
for(i=0;i<3;i++)
{
m=test1();
n=test2();
}
printf("%d,%d\n",m,n);
}
test1()
{
int x=0;
x++
;return x;
}
test2()
{
static int x=0;
x++;
return x;
}
test1和test2的区别 就在于 局部变量x是否有static .
带static 的变量,陵誉只初始化一次 下次进入函数的时候,x值是上次退出的值坦碰。
而不带的,每次都是初始化值。

于是
test1每次进入,x都是0,然后自加为1,返回值始尺信段终为1,所以m值最终也就是1
test2每次进入,x是上次值,然后自加1.于是第一次调返回1,第二次调返回2,第三次返回3,最终m值为3.
main()
{
int i,m,n;
for(i=0;i<3;i++)/*循环3次*/
{
m=test1();/*1.m=1; 2.m=1; 3.m=1*/
n=test2();/*1.n=1; 2.n=2; 3.n=3*/
}
printf("%d,%d\n",m,n);/*printf 后是1,3*/
}

test1()
{
int x=0; /*局镇芹步变量,函数执行裤闷完内存被放*/
x++ /*递增加1*/
;return x;/*每次调用胡旅弯都是return 1*/
}

test2()
{
static int x=0;/*静态变量,函数执行完内存保留*/
x++;/*递增加1*/
return x;/*调用N次就是return N*/
}
test1()里面的x是自动变量,每次调用都会变成0,不会保留以前旁亩的值
test2()里面的x是静闹乱态变量,会保存之前调用的结果。液启档
所以m=test1()执行3次,结果还是1
而n=test2()执行3次,变成1+1+1=3