f()中的i是static,静态局部变量,所以每次调用函数之后f()中的i并不被销毁,所以当main函数中的for循环第一次循环时,f()中的i=1,f()=s=1;第二次时f()中的i=2,f()=s=2;第三次时f()中的i=3,f()=s=3;第四次时f()中的i=4,f()=s=4;第五次时f()中的i=5,f()=s=5;注意这里每次调用函数时谁都重新变为1,又因为s+=i在i++之前,所以每次都是1+前一次i的值,所以a=1+2+3+4+5=15
楼主可能是没太明白静态局部变量的用法。这道题相当于1+2+3+4+5=15。 对静态局部变量是在编译时赋初值的,即只保留初值一次,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。像这道题,第一次调用函数后,i的值变为1,第二次调用函数时不再运行static int i=0这个语句,而是i的值继续用上次调用后的结果即1,所以每次调用函数后函数值分别为1、2、3、4、5,加起来为15。希望对你有帮助!记得采纳哦
1 /*a+f缺少";"*/
2/*a+f应为a+f()*/
3/*在int f()中 i 为static 而s的类型不是static 。所以,i累加而s在main每次调用f()时,是做变量初始化*/
int f()
{
static int m=0; int s=1;
s+=m;
m++;
return s;
}
main() /*a的值15*/
{
int i, a=0;
for(i=0; i<5; i++)
{
printf("%d\t%d\t",i,a);
a=a+f();
printf("%d\n",a);
}
printf("%d",a);
getch();
}
************************
int f()
{
static int m=0; static int s=1;
s+=m;
m++;
return s;
}
main()/*a的值为25*/
{
int i, a=0;
for(i=0; i<5; i++)
{
printf("%d\t%d\t",i,a);
a=a+f();
printf("%d\n",a);
}
printf("%d",a);
getch();
}
你自己再试试看
staric确实是静态局部变量,但也只是i,不是s ,所以每一次s都是1,而i不是保持0不变的。
算成25应该是把s和i都当作静态计算的
int m[a],n[a]; 这是错误的,数组不支持动态大小的
scanf ("%d %d",&m[i],&m[i]); 写错了吧,一个是&n[i]