gpt4 book ai didi

c - C程序中结构的生命周期

转载 作者:行者123 更新时间:2023-12-04 11:29:49 26 4
gpt4 key购买 nike

假设我有以下结构:

typedef struct plane_t Plane;
struct plane_t{
Point p1;
Point p2;
Point p3;
};

typedef struct arrangement_t* Arrangement;
struct arrangement_t{
//TODO add fields here
int maxPlanes;
int curPlanes;
Plane *planes;
};

我有以下功能:

Plane planeCreate(Point point1, Point point2, Point point3){

Plane newPlane = {{point1.x, point1.y, point1.z}, {point2.x, point2.y, point2.z}, {point3.x, point3.y, point3.z}};
return newPlane;
}

假设我正在编写一个函数,将一个平面添加到 arrangment_t 结构中的数组平面中。

我可以执行以下操作吗:

arrangement->planes[arrangement->curPlanes] = planeCreate(plane.x, plane.y plane.z);

或者这个结构将在退出这个函数后“消失”,这意味着我必须按以下方式:

arrangement->planes[arrangement->curPlanes] = malloc(sizeof(struct plane_t));
arrangement->planes[arrangement->curPlanes].x=plane.x;
arrangement->planes[arrangement->curPlanes].x=plane.y;
arrangement->planes[arrangement->curPlanes].x=plane.z;

最佳答案

不,它不会消失。 C 函数返回对象按值,因此该结构将被复制

此外,

arrangement->planes[arrangement->curPlanes] = malloc(sizeof(struct plane_t));

甚至无法编译 - arrangement->planes[arrangement->curPlanes] 不是指针而是结构。如果它是一个指针,那么只要您将分配更改为

,您的代码就可以工作
arrangement->planes[arrangement->curPlanes]->x = plane.x;

(访问 p 指向的结构成员是使用 -> 运算符完成的,而不是使用 )


您可能在谈论的不是返回局部变量本身,而是返回指向它的指针。例如,这个:

int *wrong_function()
{
int answer = 42;
return &answer;
}

是错误的 - 当函数返回时,answer 变量超出了范围,并且它的地址无效(所以上面会调用未定义的行为)。

关于c - C程序中结构的生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18027300/

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