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

C++ Memory address in linked list and in array

本文关键字:内存 地址 列表 数组 链接      更新时间:2023-10-16

我有简单的程序

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可以免费分配您要求的内存,因此您不应该假设返回的地址有一个模式。

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