【问题标题】:C static variables [duplicate]C静态变量[重复]
【发布时间】:2014-06-24 00:27:20
【问题描述】:

我一直在尝试用 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 是否不复存在?那么指针指向什么?以及它如何保留整数的值?为什么我可以不在这里设置 int c 静态?

【问题讨论】:

  • c 不再存在,但这并不意味着内存空间停止保存c 包含的值。但你不能保证永远都是这样。 pointer 指向内存中的那个空间。

标签: c pointers static


【解决方案1】:

c 不复存在,但您仍然可以查看该内存位置,而且您很幸运;那个时候这个值仍然存在——它还没有被其他任何东西覆盖。

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

【讨论】:

    【解决方案2】:

    c 作为一个对象不再存在。 但是您的指针不会不复存在,因为它是全局的。 您的指针指向 c 所在的内存地址。 它会继续指向那里,除非你把它放在其他地方。 但是,如果其他东西被分配到该地址或稍后在内存中与该地址重叠,则该地址处的内容可能会发生变化。

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

    【讨论】:

      猜你喜欢
      • 2015-06-12
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      • 2018-07-31
      • 1970-01-01
      • 1970-01-01
      • 2018-06-26
      • 2020-06-11
      相关资源
      最近更新 更多