我们可以在 C 中为静态变量动态分配内存吗?

can we dynamically allocate memory for static variable in C?

是否允许像这样为静态变量动态分配内存:

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

struct person
{
   int age;
   int number;
};

static struct person* person_p = NULL;

int main()
{
    person_p = (struct person*)malloc(10 * sizeof(struct person));
}

上面的代码搭建好了,但是真的允许为静态变量动态分配内存吗?

我不明白为什么不。即使静态意味着对象只能有一个实例,您仍然需要 space 该对象。但是请记住,malloc 的任何内容都需要 free,因此您需要在 main() 函数结束时执行此操作。

是的,它是有效的并且是被允许的。 (除非您将指针用作 占位符 )您可以(并且需要)在使用指针之前和之后动态分配和从指针分配 free() 内存。

相反,请记下,您 do not cast malloc() 和 C 中家庭的 return 价值

内存不是 "owned" 指向它的指针。您可以执行以下操作:

  • 动态分配内存
  • 使指针指向那个内存

说"dynamically allocate memory for a pointer"真的没有意义。

任何指针都可以指向任何对象(受对齐和别名限制),指针的存储持续时间没有区别。

请注意,指针是静态的,而不是它指向的内存。

static 表示两个不相关的东西:

  1. 给出静态内存分配(内存在程序开始时分配,只在程序结束时释放)
  2. 给出内部链接(不允许其他编译单元-模块-访问标识符。这里是一个变量,可以是一个函数)

在您的代码中,1. 静态内存分配是无关紧要的,因为变量无论如何都是全局的,因此已经有了它。

然后,2. 内部链接也无所谓,因为无论如何你要做的是在模块内部。

换句话说,person_p在你的模块中就像一个普通的全局变量,你可以为所欲为。

这行代码定义的只是指针,所以你可以在其他地方动态分配内存,如果你愿意,可以将内存地址分配给person_p