我一直在尝试用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?
答案 0 :(得分:1)
c
不再存在,但你仍然可以查看那个记忆位置,而你很幸运;那个时刻的价值仍然存在 - 它还没有被其他任何东西覆盖。
你的理解是正确的; pointer
指向stat
返回时不应该看的内存。
答案 1 :(得分:1)
c作为对象不再存在。 但是你的指针不会停止存在,因为它是全局的。 你的指针指向c所在的内存地址。 它将继续指向那里除非你把它放在其他地方。 但是,如果分配了其他内容,或者稍后在内存中重叠,则该地址的内容可能会发生变化。
我应该补充一点,这里没有什么是静态的。 static关键字具有特殊意义,它具有不同的效果,具体取决于声明它的范围。