MyMSDN

MyMSDN记录开发新知道

static in C

#include <stdio.h>
#include <stdlib.h>

char * favorite_fruit1(void);
char * favorite_fruit2(void);
void favorite_fruit3(char **);
int main(void) {
    char * fruit1 = favorite_fruit1();
    printf("%s\n", fruit1);

    char * fruit2 = favorite_fruit2();
    printf("%s\n", fruit2);

    char * fruit3 = NULL;
    favorite_fruit3(&fruit3);
    printf("%s\n", fruit3);

    printf("------END of CODE------");
    return EXIT_SUCCESS;
}
char * favorite_fruit1(void){
    char deciduous[] = "apple";
    return deciduous;
}
char * favorite_fruit2(void){
    static char deciduous[] = "apple";
    return deciduous;
}
void favorite_fruit3(char ** fruit){
    static char deciduous[] = "apple";
    *fruit = deciduous;
}

favorite_fruit1很明显会出现问题,原因是因为char deciduous[]是局部变量,在函数调用返回后,就释放了。

favorite_fruit2因为使用了static,而static限定了变量被保存在数据段(data segment)中,它的声明周期同程序一样长。所以不会出错。

favorite_fruit3是另一种有效的写法,其原理同2。

posted on 2009-05-24 18:17 volnet 阅读(1052) 评论(3)  编辑 收藏 引用 所属分类: C/C++algorithm

评论

# re: static in C[未登录] 2009-05-28 04:25 A

专家编程一书有提到的嘛。。呵呵  回复  更多评论   

# re: static in C 2009-05-28 04:29 volnet

@A
没错,记录一下,嗯,这样以后可以不用翻书也可以找到  回复  更多评论   

# re: static in C 2009-05-28 08:16 egmkang

把1这个函数改成:
char* deciduous = "apple";
  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理


特殊功能