C静态变量

时间:2014-06-24 00:27:21

标签: c pointers static

我一直在尝试用C语言包围静态变量,所以我写了这个:

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

int *pointer;
void stat();

int main()
{
    stat(); 
    printf("%i", *pointer);
}

void stat()
{
    int c = 2;
    pointer = &c;
}

这确实有效,并在命令行中显示2,但我不明白为什么。 当函数stat退出时,不存在吗?然后指针指向什么?它如何保留整数的值?为什么我不在这里做int c static?

2 个答案:

答案 0 :(得分:1)

c不再存在,但你仍然可以查看那个记忆位置,而你很幸运;那个时刻的价值仍然存在 - 它还没有被其他任何东西覆盖。

你的理解是正确的; pointer指向stat返回时不应该看的内存。

答案 1 :(得分:1)

c作为对象不再存在。 但是你的指针不会停止存在,因为它是全局的。 你的指针指向c所在的内存地址。 它将继续指向那里除非你把它放在其他地方。 但是,如果分配了其他内容,或者稍后在内存中重叠,则该地址的内容可能会发生变化。

我应该补充一点,这里没有什么是静态的。 static关键字具有特殊意义,它具有不同的效果,具体取决于声明它的范围。