【发布时间】:2020-05-24 16:02:29
【问题描述】:
如果由整数和指向下一个节点的指针组成的链表的第一个节点的地址是 1000,那么同一个链表的第二个节点的地址是什么?假设两个节点是连续分配的。
【问题讨论】:
-
这将是
next指针的值
标签: c pointers linked-list memory-address
如果由整数和指向下一个节点的指针组成的链表的第一个节点的地址是 1000,那么同一个链表的第二个节点的地址是什么?假设两个节点是连续分配的。
【问题讨论】:
next指针的值
标签: c pointers linked-list memory-address
下一个节点的地址在next。
(uintptr_t)( ((Node*)1000)->next )
我们无法从您提供的信息中给您一个具体的数字,因为链表中节点的地址之间没有关系。这就是链表的全部意义:因为节点是独立定位的,所以您可以在链表中的任何点插入和删除,而无需移动其余元素。
您已编辑问题以询问连续分配对象的地址。根据定义,第二个的地址将是第一个的地址加上第一个的大小。
(uintptr_t)( ((char*)1000) + sizeof(Node) )
我们无法根据您提供的信息为您提供具体数字,因为我们不知道Node 的大小。即使我们知道您环境中“整数”和Node* 的大小,也无法告诉我们Node 的大小。
请注意,使用一个内存分配来分配链表的两个节点(为了使它们连续分配)会非常奇怪。请注意,由于开销、过度分配和对齐填充,两次分配可能不会产生连续分配的对象(即使一个接一个地分配)。
【讨论】: