int * array = new int [n];这个功能究竟在做什么?

时间:2011-04-25 08:16:03

标签: c++ arrays pointers new-operator

我对如何创建动态定义数组感到困惑:

 int *array = new int[n];

我不知道这是做什么的。我可以告诉它创建一个指向数组的指针指向一个新的对象/数组int?有人会解释吗?

8 个答案:

答案 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)

该陈述基本上执行以下操作:

  1. 创建一个'n'元素的整数数组
  2. 使用 new 运算符创建指针时,在进程的HEAP内存中分配内存
  3. 返回有效地址(如果在执行此语句时可用的所需大小的内存分配)

答案 3 :(得分:1)

它在堆上分配的空间等于大小为N的整数数组, 并返回一个指向它的指针,该指针被分配给名为“array”的int *类型指针

答案 4 :(得分:1)

根据n的值分配那么多空间,指针指向数组,即数组的第一个元素

int *array = new int[n];

答案 5 :(得分:0)

在C / C ++中,指针和数组(几乎)是等价的。 int *a; a[0];将返回*aa[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