首页 > 解决方案 > 为结构指针分配内存

问题描述

为什么声明结构指针的时候需要分配内存

struct A{
///
};
int main(void)
{
    struct A *var=(struct A*)malloc(sizeof(struct A));
//
//
}

但是当我们声明一个结构变量时,我们不需要分配任何内存吗?

struct A var;

标签: cpointersstructure

解决方案


对于任何指针都是如此,而不仅仅是指向结构的指针。原因是,当您声明一个变量(类型为 int、char 或某个 struct A 的类型)时,您告诉编译器创建一个新变量/实例。因此,编译器会自动为该变量分配内存。但是,当您声明指向某个 int 或某个 struct A 的指针时,您实际上是在告诉编译器您需要对某个变量的引用,而不是完全是该类型的新变量。为了说明这一点:

struct A{};
int a,b; // New variable a and b
struct A c,d; // New variables c,d of type struct A

// Now take a look at this:

int *px;
px = &a; // px referencing to a, no new int variable created;
px = &b; // px referencing to b, no new int variable created;

struct A* py;
py = &c; // py referencing to c, no new struct A variable created;
py = &d; // py referencing to d, no new struct A variable created;

现在,如果你只声明一个指针 A* p,这里 p 没有引用任何东西。因此,如果您希望 p 引用 struct A 的新实例,则必须显式编写:

c
p = (struct A*)malloc(sizeof(struct A));

推荐阅读