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