【发布时间】:2017-09-26 13:38:13
【问题描述】:
我有简单的程序
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。请解释我的区别。 感谢大家的帮助;
【问题讨论】:
-
"in array is 10" - 你知道“10”是十六进制的,我希望。
-
没有理由以任何有意义的模式分配您的列表节点。但是,您的节点数组保证是连续的并且步幅为
sizeof(Node)。 -
但也不能保证
sizeof(Node)是什么,编译器可以将其填充到它认为合适的大小。
标签: c++ arrays memory linked-list