gpt4 book ai didi

c - ANSI C 在创建结构时必须使用 malloc() 吗?

转载 作者:太空狗 更新时间:2023-10-29 16:33:36 25 4
gpt4 key购买 nike

假设我有这个 struct在 ANSI C 中:

typedef struct _point
{
float x;
float y;
} Point;

和创建这个 struct 的函数:

Point createpoint(float x, float y)
{
Point p;
p.x = x;
p.y = y;
return p;
}

这允许我创建一个 struct具有此功能,即:

int main()
{
Point pointOne = createpoint(5, 6);
Point pointTwo = createpoint(10, 4);
float distance = calculatedistancefunc(pointOne, pointTwo);

/* ...other stuff */

return 0;
}

有人告诉我这段代码无效,因为 struct没有得到 malloccreatepoint(float x, float y)返回之前的函数,并且 struct将被删除。然而,当我使用我的 struct像这样,它似乎没有被删除。

所以我的问题是:我必须 malloc这个struct ,为什么?/为什么不呢?

最佳答案

无论你做什么都是完全正确的。声明-

return p;

在函数中返回局部变量p副本。但是如果你想要在函数中创建的同一个对象,那么你需要 malloc 它。但是,您稍后需要释放它。

Point createpoint(float x, float y)
{
Point p;
p.x = x;
p.y = y;
return p;
} // p is no longer valid from this point. So, what you are returning is a copy of it.

但是-

Point* createpoint(float x, float y)
{
Point *p = malloc(sizeof(Point));
p->x = x;
p->y = y;
return p;
}// Now you return the object that p is pointing to.

关于c - ANSI C 在创建结构时必须使用 malloc() 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7657097/

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