c++ - 自动更新结构体中的指针值

标签 c++ c

当内存分配稍后时,是否可以自动更新结构内的指针值?请查看代码。

struct S {void *ptr;};

void *p;
struct S ST= {p};

int main() {
    p = new int;
    void* b = ST.ptr; // b should be the same as p
    return 0;
}

最佳答案

你可以简单地持有一个间接:

C++:

struct S
{
    void*&  ptr; // ptr is now a reference to a pointer. Drawback: Has to be initialized.
};

可以按如下方式使用:

S s = {p};

但是作为成员的推荐是一个有争议的话题。在这种情况下,另一种间​​接方式可能更好:

C:

也许您的代码片段中的 new 只是为了解释目的,而您使用的是 C(代码中的详细类型说明符支持该参数)。

struct S
{
    void**  ptr; // ptr is now a pointer to a pointer. Drawback: Can be zero.
};

在本例中,您初始化 ptr以及它应该引用的指针的地址:

struct S s = {&p}; // I don't know about list-initialization in C, so i'll stick to this

随后,当取消引用它时,您将获得 p 的左值。 .

有关引用和指针之间的差异,请阅读 this post .

也不要忘记smart pointers 。也许shared ownership这就是您正在寻找的。

关于c++ - 自动更新结构体中的指针值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23968813/

相关文章:

c - 假设我们有一个非常大的结构在分配时占用巨大的内存空间

c++ - 与对象创建混淆

c++ - ATMEGA16L 上拉未激活

c - 如何检查两个字符串是否具有相同的字符?

使用 C 中的 switch 语句计算字符串中出现的空格、逗号和点

c - C 中的二维结构数组 - 如何声明和使用

c++ - 如何从多个 IP 数据包重建 TCP 流?

c++ - 在 C++ 中描述什么是虚函数的最简洁但准确的方法是什么?

c++ - 多线程控制台 I/O

c - 在 O(logn) 时间内求出从 k= 0 到 n 的 x^k 的总和