C语言基础问题求解答

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)的调用次序在不同编译器可能不同

  1. 如果先调用f(5),在调用f(3):
    调用f(5),返回0+1+2+3+4+5,即15,此时i=5
    调用f(3),此时i=5,循环直接跳过返回0
    sum =15+0,即15

  2. 如果先调用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