gpt4 book ai didi

c - 为结构指针分配内存

转载 作者:太空宇宙 更新时间:2023-11-04 06:47:37 25 4
gpt4 key购买 nike

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

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

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

struct A var;

最佳答案

对于任何指针都是如此,而不仅仅是指向结构的指针。原因是,当您声明一个变量(类型为 int、char 或某些结构 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 引用一个新的结构 A 实例,你必须显式地写:

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

关于c - 为结构指针分配内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55998378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com