C语言2级 此题需要注释 看不懂

来源:百度知道 编辑:UC知道 时间:2024/06/11 20:43:49
#include "stdio.h"
fun()
{static intx=5;
x++;
return x;}
main()
{int i,x;
for(i=0;i<3;i++)
x=fun();
printf("%d\n",x);}
答案为 8

这道题关键是你对static的理解。
例如,在一个子函数里,static定义了一个变量a ,那么当子程序调用完毕后,变量a被摧毁。但是,其值被保留了下来,当子函数下一次被调用时,该值就被作为变量a的值。
也就是说:static intx=5; 这句语句只在fun()第一次被调用时起作用,后2次被调用时,它被跳过了。
i的值_______fun调用前x_______fun调用后x
0___________未知______________ 6
1_____________6________________7
2_____________7________________8

理解了吧,再布理解。。我就说说不清了。。。

#include "stdio.h"
fun() //子函数
{static int x=5;
x++;
return x;}
main()
{int i,x;
for(i=0;i<3;i++) //for循环,i=0,1,2调用三次,x=6,7,8
x=fun(); //调用子函数,返回X
printf("%d\n",x);} //最后一次返回8

static int x = 5;定义函数fun使用一个存放在静态存储区的变量x,非main函数中的其他函数中的静态存储区变量具有函数返回以后继续保存其值的特点
在fun中的return x返回后x的值没有被销毁
在你的main循环中调用了3次fun函数也就是说x++了3次,所以最终打印值是8

static为静态局部变量,初始化时只进行一次,再次调用时不再重新赋值。 fun函数里的的x就是这种变量,在第一次赋值x=5时就再次调用时便不再赋值,for循环使fun函数执行了3次,所以x也自增了三次,所以fun的返回值x就为8了

你可以把static理解为全局变量,只不过只能在一个函数中使用而已,其他和全局变量没什么区别。
程序在编译的时候,static变量和全局变量都是放在同一个区的。