C语言中static变量的赋值问题

fun(inta){intb=0;staticintc=3;b++;c++;return(a+b+c);}main(){inti,a=5;for(i=0;i<3;i++)... fun(int a)
{ int b=0;static int c=3;
b++;
c++;
return(a+b+c);}
main()
{ int i,a=5;
for(i=0;i<3;i++)
printf(" %d %d ",i,fun(a));
printf("\n"); }
这个题目里面那个static变量c的值是怎么变化的呢?
不是说静态局部变量的值在下次进入该函数时储存单元的值是不变的么?
给的答案里面
第一次调用c初值为3,结束时值为4
第二次调用c初值为4,结束时值为5
第三次调用c初值为5,结束时值为6
怎么会这样子呢?
c的值不是应该始终是3么?每次调用函数的时候c变量不是被赋值为3吗?
那么全局变量呢?
它不是只能是静态变量么?
全局变量为什么又可以在初始化以后再次赋值呢
展开
 我来答
小夏聊生活
高能答主

2019-11-25 · 专注于分享生活知识,热爱生活
小夏聊生活
采纳数:448 获赞数:114616

向TA提问 私信TA
展开全部

static int a = 0; // 运行期时初始化一次, 下次再调用时, 不进行初始化工作如下:

printf(“%d”,a);

a++;

}

int main()

{

staticLocalVar(); // 第一次调用, 输出a=0

staticLocalVar(); // 第二次调用, 记忆了第一次退出时的值, 输出a=1

return 0;

}

扩展资料

1、static对全局变量的修饰,可以认为是限制了只能是本文件引用此变量。有的程序是由好多.c文件构成。彼此可以互相引用变量,但加入static修饰之后,只能被本文件中函数引用此变量。

2、static对栈变量的修饰,可以认为栈变量的生命周期延长到程序执行结束时。一般来说,栈变量的生命周期由OS管理,在退栈的过程中,栈变量的生命也就结束。

3、但加入static修饰之后,变量已经不再存储在栈中,而是和全局变量一起存储。同时,离开定义它的函数后不能使用,但如再次调用定义它的函数时,它又可继续使用, 而且保存了前次被调用后留下的值。

匿名用户
2016-02-19
展开全部
static变量与普通变量的区别就在于此

每次调用fun()函数,
函数开始时,初始化普通变量、分配内存,函数结束后,普通变量所占用的内存就被释放
而对于static变量,只是第一次调用时会初始化,函数体结束之后,static变量占用的内存会被保留,从而变量的值不会发生变化,下次调用该函数,也不会重新初始化,而是保留上次的值
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
风清安有绸
2020-03-12 · TA获得超过3.7万个赞
知道大有可为答主
回答量:1.2万
采纳率:30%
帮助的人:1116万
展开全部
如果是赋值初始值,那么在程序运行初始就已经初始化了。
和全局变量是一样的。
但体现出来作用是在第一次调用。
至于后续赋值,随便什么时候都可以
想赋值的时候就赋值咯。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
heizeer
推荐于2017-11-24 · TA获得超过135个赞
知道答主
回答量:74
采纳率:0%
帮助的人:65.1万
展开全部
呵呵,这就是静态变量的功能啊,静态变量只被初始化1次,所以不管几次调用,它都不会再执行int c=3这行啦。而c的值就是你之前运算的结果
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
小鱼1979117
2011-01-31 · TA获得超过1.1万个赞
知道大有可为答主
回答量:1905
采纳率:0%
帮助的人:1118万
展开全部
static定义的变量只有第一次被赋值,这之后会自然使用之前留下来的值了,不会每次都按3初始化的。:-)
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式