gpt4 book ai didi

c++ - 为什么数组中的指针不存储在连续的内存中

转载 作者:行者123 更新时间:2023-11-28 00:05:21 25 4
gpt4 key购买 nike

一段时间以来,我一直在努力解决这个问题,但我就是无法理解它。

如果我有这样的数组:

int numbers[] = {0,1,2,3,4,5,6,7,8,9};

每个数字将存储在连续的内存中,彼此之间的距离为 int(在我的系统上为 4 个字节)。所以如果我有一个这样的指针数组:

int* pNumbers[] = {new int(0), new int(1), new int(2)};

我希望它们存储在内存中,彼此之间有一个指针的距离(在我的系统上是 4 个字节),但事实并非如此。相反,它们以 64 字节的距离存储。此外,如果我创建一个数组,该数组由指向包含 int 和 bool 的 Struct 的指针组成,则距离为 72 字节。

谁能解释一下这里发生了什么,以及数组中每个元素之间的距离是如何确定的。

最佳答案

int* pNumbers[]

这声明了一个包含连续 int * 元素的数组。它们将恰好相隔 sizeof( int * ) 个字节。根据平台的不同,这可能介于 28 之间,但绝对不是 64

... = {new int(0), new int(1), new int(2)};

这用指向已分配内存的指针初始化元素,用给定的值初始化内存。根据您的实现,这些指向内存的指针可以像 sizeof( int ) 一样靠近、相距很远或不连续。确切数字未指定。

因此,数组中的 int * 元素 将是连续的并且完全sizeof( int * ) 分开。他们可以指向几乎任何地方。

这就是为什么评论员(包括我自己)怀疑您的测量有问题,即您打印的是指向的地址,而不是指针的地址

关于c++ - 为什么数组中的指针不存储在连续的内存中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35989689/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com