让我说我做这样的事情
int *array;
array = new int[10];
如何为此阵列设置内存?
什么类型array[0]
? (一个指针?一个int?)
答案 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
。