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

时间:2017-09-26 13:38:13

标签: c++ arrays memory linked-list

我有简单的程序

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。请解释我的区别。 谢谢你的帮助;

1 个答案:

答案 0 :(得分:2)

new可以自由地在您喜欢的地方分配您请求的内存,因此您不应该假设所返回地址的模式。

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