有以下程序:# include<stdio.h> int fun() { static int x=1; x*=2;return x; }main() { int i,s=1; for(

有以下程序:#include<stdio.h>intfun(){staticintx=1;x*=2;returnx;}main(){inti,s=1;for(i=1;i<... 有以下程序:
# include<stdio.h>
int fun()
{
static int x=1;
x*=2;return x;
}
main()
{
int i,s=1;
for(i=1;i<=2;i++) s=fun();
printf{"%d\n",s};
}
程序运行后的输出结果是?
展开
 我来答
lishuo_007
推荐于2018-03-07 · TA获得超过421个赞
知道小有建树答主
回答量:205
采纳率:0%
帮助的人:153万
展开全部
s=4,printf();//大括号错误
分析如下:
static 定义的局部变量,在函数调用时只初始化一次,也就是说只有第一次调用fun时,static int x=1;才有效,而在后面无论多少次调用,x的值不会被初始化,所以该函数作用相当于每次调用,x都变成其值的二倍,所以调用2次,输出结果为4。
扩展:若把static去掉,则每次调用时,x都先被初始化为1,然后返回x*2,即2,这样每次调用结果都一样(2),所以不管调用多少结果都为2。
下面解释下为什么局部static变量其值会有保存?而一般局部变量不能保存其值?因为static变量的存储位置为程序的静态区,而一般函数局部变量是存储在函数栈中,这样在函数调用结束后,程序静态区的变量不销毁,而栈中的局部变量会销毁,所以才会有以上的两种截然不同的结果。
zhy_19
2010-09-16 · TA获得超过769个赞
知道小有建树答主
回答量:439
采纳率:0%
帮助的人:344万
展开全部
ls正解,我补充一下,静态变量static是始终保持上一次的值的……
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式