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



假设我做了类似于的事情

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

最新更新