gpt4 book ai didi

c++ - 包含相同类型的结构指针的结构指针的初始化

转载 作者:行者123 更新时间:2023-11-28 01:14:01 24 4
gpt4 key购买 nike

我试图了解指向结构对象(包含指向同一类型结构的指针)的指针的初始化是如何发生的。例如我有一个 struct :

struct node {
node *next;
};

假设我有一个内存池的起始地址,即池是一个指向起始位置的指针。 (为了争论起见,假设起始内存是 1001 。)

char* pool[65536];

现在我声明一个 node 类型的指针并通过 reinterpret_cast 为其分配起始内存.

node* a =reinterpret_cast<node *>(pool);

当前 a指向内存 1001 .现在我声明另一个指针

node* b;
b=a;

现在发生的是 b指向与 a 相同的地址即1001 .指针b->next指向一些预期的随机位置,但指针的地址 b->nextb 的地址相同指向即1001 .即

&b->next = b

我不明白为什么b->next的地址与指针 b 指向的相同是指向?据我了解b->next应该位于 b 的位置位于。

P.S:我试图找出这是如何发生的,但找不到相关文档。如果此类问题已在某些文档或其他问题中得到解答,请提供链接。

P.P.S:在与我的同事进一步讨论这个问题后,我发现 b是指针而不是对象。它指向一个位置(即 1001 ),根据 b存在一个包含指针 next 的节点对象因此 b->next 的地址( &b->next ) 与 b 的位置相同指着。

enter image description here

最佳答案

让我们以基本前提为例,但用一个有效的例子来代替:

node* a = new node;
node* b = a;

现在 ab 都指向同一个对象,内存中的同一个位置。

从图形上看,它看起来像这样:

+---+| a | --\+---+    \     +-----------------+          >--> | the node object |+---+    /     +-----------------+| b | --/+---+

因为 ab 都指向完全相同的对象,所以它遵循 a->nextb ->next 必须完全一样。您可以通过打印 &a->next&b->next 来验证它。

a->nextb->next 的(目前不确定的)值唯一可能不同的原因是 undefined behavior .首先,因为 a->next(因此 b->next)是不确定的,以任何方式使用它的值除了初始化它都会导致 UB。其次,如果你没有以正确的方式初始化 ab (例如你真的按照你的问题初始化它)那么当你取消引用时你也会有 UB ab

关于c++ - 包含相同类型的结构指针的结构指针的初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59288363/

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