1.问题:
int f(int n) { static int i = 1; if(n >= 5) return n; n = n+i; i++; return f(n); } int main() { printf( "%d\n",f(1)); }
2.答案为: 7
3.过程如下:
int f(int n) //此时由main函数知 n=1
{
static int i = 1; //静态局部变量,只运行一次,生命周期延长
if(n >= 5) //首次 i==1 <5 故执行 n = n+i=1+1=2 i++后i=1(先用后加)用的时候为i=2
return n; //之后 f(n)即f(2) 2<5 n = n+i=2+2=4 i++后i=2(先用后加)用的时候为i=3
n = n+i; //再者 f(n)即f(4)4<5 n = n+i=4+3=7 i++后i=3(先用后加)用的时候为i=4
i++; //之后 f(n)即f(7) 7>=5 故 return 7
return f(n);
}
int main()
{
printf( "%d\n",f(1));
}
4.对static的重点:
1)static在C语言中主要是两种用法
1、修饰局部变量
2、修饰函数和全局变量
2)static修饰局部变量时该变量是存放在静态存储区,生命周期是整个程序结束。
3)c语言static的作用:
第一、在修饰变量的时候,static修饰的静态局部变量只执行一次,而且延长了局部变量的生命周期,直到程序运行结束以后才释放。
第二、static修饰全局变量的时候,这个全局变量只能在本文件中访问,不能在其它文件中访问,即便是extern外部声明也不可以。
第三、static修饰一个函数,则这个函数的只能在本文件中调用,不能被其他文件调用。Static修饰的局部变量存放在全局数据区的静态变量区。初始化的时候自动初始化为0;
(1)不想被释放的时候,可以使用static修饰。比如修饰函数中存放在栈空间的数组。如果不想让这个数组在函数调用结束释放可以使用static修饰
(2)考虑到数据安全性(当程想要使用全局变量的时候应该先考虑使用static)
加油!K