gpt4 book ai didi

C++链表和数组中的内存地址

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

我有一个简单的程序

struct Node
{
int data;
Node *next;
};

int main()
{
// Make linked list with 10 Node
Node* head = new Node();
head->data = 9;
Node* link = head;
for (int i = 0 ; i < 9 ; ++i)
{
Node* newNode = new Node();
newNode->data = i;
link->next = newNode;
link = newNode;
}
printListAddress(head);
// Make array of 10 Node
Node* arr= new Node[10];
printArrAddress(arr, 10);
return 0;
}

我明白了

0x1f97c20   0x1f97c40   0x1f97c60   0x1f97c80   0x1f97ca0   
0x1f980d0 0x1f980e0 0x1f980f0 0x1f98100 0x1f98110

在链表中,每个节点的内存地址差为20,在数组中为10,但sizeof(arr[i]) = sizeof(*head) =16。请解释一下区别。感谢所有帮助;

最佳答案

new 可以随意分配您请求的内存,所以您不应该假设返回的地址存在某种模式。

对于数组,数组中的项目将在内存中彼此相邻(数组是连续的字节 block )。对于 T 类型,一个项目将 sizeof(T) * index 字节放入数组中。

关于C++链表和数组中的内存地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46428094/

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