当我创建一个int指针并实例化一个数组时,内存中发生了什么?

时间:2012-11-15 01:31:00

标签: c++ c

让我说我做这样的事情

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

如何为此阵列设置内存? 什么类型array[0]? (一个指针?一个int?)

4 个答案:

答案 0 :(得分:2)

此代码首先为一个名为array的指针分配空间。该内存在堆栈中分配。

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

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

对于上帝的缘故,开始接受人们给你的一些答案!

答案 1 :(得分:1)

在这种情况下,array[0]的类型为int。

内存只是一个指向内存的指针,可以保存10个在免费商店中分配的内容(主要转换为:“我们老实说不关心它的地址,我们只关心它是我们的记忆而我们可以使用它直到我们删除它“)。

请注意,在这种情况下,您依赖于最初在C中定义的等效性:x[y]等同于*(x+y)。在这种情况下,您的x是一个指针,并且指针的添加以它指向的类型大小的增量发生,因此当我们使用array[N]时,我们得到N array指向的内存中的项。

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

答案 2 :(得分:1)

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

数组已被声明为指向int的指针。

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

答案 3 :(得分:0)

  

如何为此阵列设置内存?

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

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

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

  

array[0]是什么类型的?

array[0]int数组的第一个元素,因此其类型为int