免费注册 查看新帖 |

Chinaunix

广告
  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1696 | 回复: 7
打印 上一主题 下一主题

问个static的问题,谢谢大家。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-09-11 11:24 |只看该作者 |倒序浏览
char  function(void)
{
    char name[60], *p;
    static char value[CFG_MAX_USERNAME+1];
    sprintf(name,"login_username");
   
    p = nvram_get(name);
    strcpy(value, p);
    NVRAM_FREE(p);
   
    return value;
}

==============




因为value是static,所以,它会放在全局数据区,并且它的“生命周期”是“直到程序结束。

问题:
       当多次调用函数function时,第一次会在全局数据区为value分配空间
                                               第二次呢?
     
      应该是:第一次定义并分配空间,以后不用再分配了吧?



[ 本帖最后由 anank 于 2008-10-3 14:32 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2008-09-11 11:25 |只看该作者
最近看见搂住问题好多,而且都是些基本问题,我觉得这些问题最好自己解决,培养自己解决问题的能力

论坛徽章:
0
3 [报告]
发表于 2008-09-11 11:29 |只看该作者
静态局部变量有以下特点:

    * 该变量在全局数据区分配内存;
    * 静态局部变量在程序执行到该对象的声明处时被首次初始化,即以后的函数调用不再进行初始化;
    * 静态局部变量一般在声明处初始化,如果没有显式初始化,会被程序自动初始化为0;
    * 它始终驻留在全局数据区,直到程序运行结束。但其作用域为局部作用域,当定义它的函数或语句块结束时,其作用域随之结束;

论坛徽章:
0
4 [报告]
发表于 2008-09-11 11:33 |只看该作者
静态变量放在静态区。。进程退出的时候就释放了。。

论坛徽章:
0
5 [报告]
发表于 2008-09-11 11:44 |只看该作者
有的时候在函数内部static,用于附加判断用的(利用可以保留上一次调用结果)。
当这个值为啥啥的时候,做啥啥的。

记得C++中还可以用于类的初始化(只初始化一次)。

LZ还是自己在网上多找找static的用法分析吧,网上都有现成的

论坛徽章:
0
6 [报告]
发表于 2008-09-11 12:30 |只看该作者
谢谢各位,呵呵。

明白了。。

论坛徽章:
0
7 [报告]
发表于 2008-09-11 12:31 |只看该作者
原帖由 @sky 于 2008-9-11 11:25 发表
最近看见搂住问题好多,而且都是些基本问题,我觉得这些问题最好自己解决,培养自己解决问题的能力



谢谢提醒,呵呵。

其实,一般情况下,遇到问题,我也都是先大致的搜索一下。

static这个东西以前就学习过,可能是因为时间长了,知道一些,但是也忘了另外一些,所以直接来问题,让大家提示提示。呵呵。

论坛徽章:
0
8 [报告]
发表于 2008-09-11 12:48 |只看该作者

回复 #1 anank 的帖子

进程退出时回收
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP