int f(int m)
{static int i=0;
int s=0;
for(; i<=m; i++) s+=i;
return s;
main()
int sum;
sum=f(5)+f(3);
erintf("%dn”,sum);问结果为什么等于15为什么结果不等于21
C语言没有规定操作数的计算顺序,所以f(5)
和f(3)
的调用次序在不同编译器可能不同
如果先调用f(5)
,在调用f(3)
:
调用f(5)
,返回0+1+2+3+4+5,即15,此时i=5
调用f(3)
,此时i=5
,循环直接跳过返回0
sum =15+0,即15
如果先调用f(3)
,在调用f(5)
调用f(3)
,返回0+1+2+3,即6,此时i=3
调用f(5)
,此时i=3,返回3+4+5,即12
sum=6+12,即18
i是静态变量!第二次调用时已大于3!所以第二次返回s为0