可以说我做这样的事情
int *array;
array = new int[10];
这个数组的内存是如何设置的?什么类型array[0]
?(一个指针?一个整数?)
此代码首先为称为数组的指针分配空间。该内存在堆栈上分配。
接下来,它从堆中分配一块内存来保存 10 个整数,并将地址分配给array
.
array[0]
将引用 10 块中的第一个整数。下标使其成为值而不是指针。
看在上帝的份上,开始接受人们给你的一些答案吧!
在这种情况下,array[0]
具有 int 类型。
内存只是一个指向内存的指针,用于保存分配在空闲存储区某处的 10 个整数(主要翻译为:“老实说,我们并不关心它的地址,我们只关心它是我们的内存并且我们可以使用它'直到我们删除它')。
请注意,在这种情况下,您依赖于最初在 C: 中定义的等价,x[y]
它等价于*(x+y)
. 在这种情况下,你x
是一个指针,并且指针的加法发生在它指向的类型的大小的增量中,所以当我们使用 时,我们会得到指向的内存中的第array[N]
N项array
。
一个小细节:你不应该这样做——可能永远不会。在 C++中使用几乎没有充分的理由。new type[size]
有一次我们这样做是因为std::vector
还没有更好的替代品(例如 )——但现在这是一个糟糕的想法。
array[0] 作为数组的一个元素,是一个 int。
array 已被声明为指向 int 的指针。
在内存中,“新”调用分配一个空间块来保存十个整数。'array' 是指向该块开始的指针。array[0] 是第一个元素。array[1] 是第二个,依此类推。
这个数组的内存是如何设置的?
new int[10]
将从空闲存储中动态分配足够的内存以包含十个类型的值int
。它为您提供了指向该内存的指针,您将其存储在array
变量中。
array
本身是指针类型的自动变量;它通常存储在为当前函数调用自动分配的堆栈区域中,并在函数返回时被释放。
完成内存后,您必须使用delete [] array
. 由于很容易出错,因此通常最好使用智能指针或容器等RAII类型来管理动态资源。在这种情况下,std::vector<int> array(10)
将为您提供一个相同大小的数组,并在超出范围时自动为您删除它。
什么类型
array[0]
?
array[0]
是 的数组的第一个元素int
,所以它的类型是int
。