int a=1; //全局变量
int f(int c)
{
static int a=2; //静态变量,函数结束值不变
c=c+1;
return (a++)+c; //返回a加上c的值,即2+c,然后a的值自加变为3
}
void main()
{
int i,k=0;
for(i=0;i<2;i++)
{
int a=3; //局部变量
k+=f(a); //第一次循环得0+3+1+2,第二次循环得6+3+1+3,循环后k的值为13
}
k+=a; //加上全局变量的a,13+1=14
printf("%d\n",k);
}
#include
int a=1;
//全局变量a=1,只要不是在子函数内,a的值都是他
int f(int c)
{ static int a=2; //局部静态变量a=2,在本函数内,a使用后不复原
c=c+1;
rerurn (a++)+c; //返回a+c的值,然后a再加1
}
main()
{ int i,k=0;
for(i=0;i<2;i++)
{int a=3;//局部变量,只是作用在定义的语句内
k+=f(a);}
k+=a;
printf("%d\n",k);
}
分析:
i<2;循环了2次;
第1次:
f(a)=f(3)::c=c+1=3+1=4;(a++)+c=2+4=6(其中,f(3)是用的局部变量
,c=c+1用的是函数参数a传的值,a++是用的局部静态变量,而且结束后,局部静态变量自己加1,static a=3;)
返回来k=k+f(a)=0+6=6;
第2次:
f(a)=f(3)::c=c+1=3+1=4;(a++)+c=3+4=7;
返回来k=k+f(a)=6+7=13;
退出循环:
k+=a;k=k+a=13+1=14(这里的a是全局变量了,定义在main()之外)
所以是14
- -
返回值是在子函数中运算后的a+1+c
由于static所以每次进入子函数不需要重新赋值给a
这些知识点教科书上面都有介绍的应该
还有是return不是rerurn
(a++)+c应该是在关于赋值的章节里面的,如果有教材的话一般在第二章
static大概在第六到第七章中是有关函数的章节中比较靠后的知识点
二楼讲得很详细补充一点学C用谭浩强的书较好 这题综合性强 静态全局局部大概在第六章讲完