0

可以说我做这样的事情

int *array;
array = new int[10];

这个数组的内存是如何设置的?什么类型array[0]?(一个指针?一个整数?)

4

4 回答 4

2

此代码首先为称为数组的指针分配空间。该内存在堆栈上分配。

接下来,它从堆中分配一块内存来保存 10 个整数,并将地址分配给array.

array[0]将引用 10 块中的第一个整数。下标使其成为值而不是指针。

看在上帝的份上,开始接受人们给你的一些答案吧!

于 2012-11-15T01:35:37.593 回答
1

在这种情况下,array[0]具有 int 类型。

内存只是一个指向内存的指针,用于保存分配在空闲存储区某处的 10 个整数(主要翻译为:“老实说,我们并不关心它的地址,我们只关心它是我们的内存并且我们可以使用它'直到我们删除它')。

请注意,在这种情况下,您依赖于最初在 C: 中定义的等价,x[y]它等价于*(x+y). 在这种情况下,你x是一个指针,并且指针的加法发生在它指向的类型的大小的增量中,所以当我们使用 时,我们会得到指向的内存中的第array[N]Narray

一个小细节:你不应该这样做——可能永远不会。在 C++中使用几乎没有充分的理由。new type[size]有一次我们这样做是因为std::vector还没有更好的替代品(例如 )——但现在这是一个糟糕的想法。

于 2012-11-15T01:34:52.877 回答
1

array[0] 作为数组的一个元素,是一个 int。

array 已被声明为指向 int 的指针。

在内存中,“新”调用分配一个空间块来保存十个整数。'array' 是指向该块开始的指针。array[0] 是第一个元素。array[1] 是第二个,依此类推。

于 2012-11-15T01:35:01.373 回答
0

这个数组的内存是如何设置的?

new int[10]将从空闲存储中动态分配足够的内存以包含十个类型的值int。它为您提供了指向该内存的指针,您将其存储在array变量中。

array本身是指针类型的自动变量;它通常存储在为当前函数调用自动分配的堆栈区域中,并在函数返回时被释放。

完成内存后,您必须使用delete [] array. 由于很容易出错,因此通常最好使用智能指针或容器等RAII类型来管理动态资源。在这种情况下,std::vector<int> array(10)将为您提供一个相同大小的数组,并在超出范围时自动为您删除它。

什么类型array[0]

array[0]是 的数组的第一个元素int,所以它的类型是int

于 2012-11-15T02:34:20.457 回答