我对如何创建动态定义数组感到困惑:
int *array = new int[n];
我不知道这是做什么的。我可以告诉它创建一个指向数组的指针指向一个新的对象/数组int?有人会解释吗?
答案 0 :(得分:19)
new 分配存储您请求的对象/数组所需的内存量。在这种情况下n个int。
然后指针将地址存储到该内存块中。
但要小心,在你通过编写
告诉它之前,这个已分配的内存块不会被释放delete [] array;
答案 1 :(得分:9)
int *array = new int[n];
它声明了一个指向类型为int
且大小为n
的动态数组的指针。
更详细的答案:new
分配大小等于sizeof(int) * n
字节的内存,并返回由变量array
存储的内存。此外,由于内存是使用new
动态分配的,因此您必须通过编写手动解除分配(当然,当您不再需要时):
delete []array;
否则,您的程序将泄漏至少sizeof(int) * n
字节的内存(可能更多,具体取决于实现使用的分配策略)。
答案 2 :(得分:7)
该陈述基本上执行以下操作:
答案 3 :(得分:1)
它在堆上分配的空间等于大小为N的整数数组, 并返回一个指向它的指针,该指针被分配给名为“array”的int *类型指针
答案 4 :(得分:1)
根据n的值分配那么多空间,指针指向数组,即数组的第一个元素
int *array = new int[n];
答案 5 :(得分:0)
在C / C ++中,指针和数组(几乎)是等价的。
int *a; a[0];
将返回*a
,a[1];
将返回*(a + 1)
但是当指针可以时,数组不能改变它指向的指针。
new int[n]
将为“数组”分配一些空格
答案 6 :(得分:0)
从C ++ 11开始,执行此操作的内存安全方法(仍使用类似的构造)与std::unique_ptr
一起使用:
git rebase -i
这会创建一个指向内存块的智能指针,该内存块足够大,以便std::unique_ptr<int[]> array(new int[n]);
整数在超出范围时自动删除。这种自动清理很重要,因为它避免了代码提前退出并且永远不会达到n
语句的情况。
如果您需要一个能够动态调整大小的数组,则另一个(可能是首选的)选项是使用std::vector
。当你需要一个未知数量的空间时,这是很好的,但它有一些缺点(添加/删除元素的非恒定时间)。您可以创建一个数组并使用以下内容添加元素:
delete [] array;
答案 7 :(得分:-1)
new
operator为$q.all
个整数块分配空间,并将该块的内存地址分配给.catch
变量if (current.ID == someParamSentID)
{
var lbItem = (ListBoxItem)lbMine.ItemContainerGenerator.ContainerFromItem(current);
...
}
。
适用于一维数组的新的一般形式如下所示:
n