| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 473 人关注过本帖
标题:一道静态变量问题,请教
只看楼主 加入收藏
widon1104
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2010-3-9
结帖率:100%
收藏
已结贴  问题点数:5 回复次数:5 
一道静态变量问题,请教
#include <stdio.h>
int f()
{
    static int a=0;
    a+=5;
    return a;
}
int main(void)
{
    int i;
    for(i=0;i<2;i++){
        printf("%d\n",f());
    }
    return 0;
}
这道题的输出为什么是
5
10

我觉得每次调用f函数,a就被重新初始化为0了啊
搜索更多相关主题的帖子: 变量 静态 
2010-04-24 18:09
kingsroot
Rank: 9Rank: 9Rank: 9
等 级:蜘蛛侠
威 望:1
帖 子:284
专家分:1159
注 册:2010-3-28
收藏
得分:5 
用static修饰变量a a表示一个静态变量,不随函数的调用而建立的,只要第一次初始化后,就不用初始化了。
2010-04-24 18:14
我菜119
Rank: 10Rank: 10Rank: 10
等 级:青峰侠
帖 子:938
专家分:1756
注 册:2009-10-17
收藏
得分:0 
二楼解释的有点不太全面,我再好好的解释一下吧!
static int a ;这样每次函数调用的时候都会保存上一次计算的结果!(为什么呢??自己回去好好的查查资料)
比如你的这个程序中,第一次调用函数f()的时候运算a的值为5,当第二次调用f()的时候a的值就是从5开始了呀!而不是你想要的还是0。如果有问题,可以方便加我的QQ:122392279

愿用余生致力编程
2010-04-24 20:07
BINGQING
Rank: 2
来 自:武汉
等 级:论坛游民
帖 子:98
专家分:75
注 册:2010-3-29
收藏
得分:0 
顶三楼的
2010-04-24 22:38
jmjy
Rank: 3Rank: 3
等 级:论坛游侠
威 望:1
帖 子:44
专家分:146
注 册:2010-1-7
收藏
得分:0 
二楼的解释够了。静态变量的生命周期是创建后到该程序结束,注意,不是函数结束!LZ说“ 我觉得每次调用f函数,a就被重新初始化为0了啊”
二楼说:“只要第一次初始化后,就不用初始化了。”回答的刚刚好。静态变量和局部变量的不同就出来了。
三楼的“static int a ;这样每次函数调用的时候都会保存上一次计算的结果!(为什么呢??自己回去好好的查查资料)”
查什么资料?看二楼。
2010-04-24 22:49
faminxmu
Rank: 3Rank: 3
来 自:厦门
等 级:论坛游侠
帖 子:191
专家分:106
注 册:2008-4-23
收藏
得分:0 
函数调用都是通过栈来完成的,一般的变量是分配在栈上的,所以每次调用函数所对应的变量在内存中是不同的,但是经过static修饰的变量不同,它在内存中占特定的位置而且只初始化一次,你可以把它当全局变量(这个不完全正确,因为它只在本函数内有效)

在虚拟的世界中寻找目标。
2010-04-24 22:54
快速回复:一道静态变量问题,请教
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016566 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved