我有简单的程序
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。请解释我的区别。 谢谢你的帮助;
答案 0 :(得分:2)
new
可以自由地在您喜欢的地方分配您请求的内存,因此您不应该假设所返回地址的模式。
对于数组,数组中的项目将在内存中彼此相邻(该数组是一个连续的字节块)。对于类型T
,项目将是sizeof(T) * index
字节到数组中。