Closed. This question needs details or clarity. It is not currently accepting answers. Learn more
想改进这个问题吗?添加细节并通过editing this post澄清问题。
三年前关闭。
struct AD_SINT32Type* = NULL;
foo = (struct mystructArray*)malloc(sizeof(struct mystructArray));
foo[0].x = 45;
foo[0].y = 90;
coords[0] = &foo[0];


foo = (struct mystructArray*)realloc(foo, 2 * sizeof(struct mystructArray));
foo[1].x = 30;
foo[1].y = 15;
coords[1] = &foo[1];

在这段代码之后"coords[1]"按预期指向,但是"coords[0]"指向重新分配之前的旧地址。是否有方法自动调整地址"coords[0]"指向?

最佳答案

没有完全“自动”的方法来实现这一点,但是在这种需要重新分配的情况下,您经常会看到“偏移指针”的使用

coords[0] = &foo[0];

您可以将coords的类型更改为类似于ptrdiff_t[]的类型,然后执行以下操作:
coords[0] = &foo[0] - foo;

这样,保存的不是实际指针,而是从分配开始的偏移量。这个价值永远不需要改变。

10-07 19:08
查看更多