【s=0,i=0】
i<2成立,开始循环:s+=f(i);【i=0,调用f(0)】
f(0): 【n=0,t=0,a=5】n/2等于0条件为假,执行else,else中的a,可称之为aa=7; t+=a++;即t+=aa; aa++;【t=7,aa=8】结束else后aa被舍弃,return t+a++即return t+a; a++; 即return 12; 【a=6】,退出f后f中定义的a被舍弃
s+=f(0);【s=12】
i++; 【i=1】
i<2成立,继续循环:s+=f(i); 【i=1,调用f(1)】
f(1):【n=1,t=0,a=5】n/2是整数除仍等于0,执行else,t+=aa++;【t=7】,返回12
s+=f(1); 【s=12+12=24】
i++;【i=2】
i<2不成立,结束循环
输出24
在子程序中定义的a,虽然也叫a,但与主程序中的不是一个,它起作用的范围在函数f中,换句话说,函数f中用到a变量就是这个a,如果在程序的大括号中定义变量,那么其作用域将是这重大括号,如同else中的变量a,所有大括号中用到的就是这个a而不是外面f定义的a,你为了区别起见,可以修改程序改成aa,或aaa省得混淆,比如:
int f(int n) { int t=0,aa=5;
if ( n/2 ) { int aaa=6; t+=aaa++; } else { int aaa=7; t+=aaa++; }
return t+aa++;
}
追问意思是开始定义了a,在后面还能再次定义一个相同名称的但是互不干扰?