链接列表和数组中的C 内存地址
C++ Memory address in linked list and in array
我有简单的程序
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
字节到数组中。
相关文章:
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 在C++中打印指向不同基元数据类型的指针的内存地址
- 为什么 vector 的随机访问迭代器给出与指针不同的内存地址?
- 使用内存地址访问结构的属性值
- 为什么C++总是显示十六进制内存地址,而不仅仅是整数?
- 将布局映射到内存地址
- 为什么同一个变量的内存地址不同?
- 无法将内存地址转换为值
- 给定特定内存地址的数组的动态内存分配
- 在 Microsoft Access SQL 中调用自定义 DLL 函数时传递的内存地址无效
- 获取 R 数据帧的内存地址
- c++ 编译器是否保护常量内存地址免受任何更改?
- 如何防止矢量的内存地址更改
- cout 打印内存地址而不是值
- 如何运行外部程序,向其传递内存地址以读取/写入?
- 循环中的变量被设置为下一个数组的元素始终具有相同的内存地址?
- 重载 ostream << 运算符,指针作为参数,导致输出上的内存地址
- C++在变量的内存地址上做什么来"deallocate"它?
- 在指向现有内存地址的 hpp 文件中声明成员函数的最佳方法
- 为什么我无法获取 MSVS2019 / C++ 中字符或uint8_t变量的内存地址?