()和[]动态分配有什么区别?

时间:2014-09-03 04:00:09

标签: c++

任何人都可以解释以下两种形式之间的区别以及每种形式的作用:

int *p = new int[5]; 

int *p = new int(5);

查询

1)我们在两种情况下分配什么,即整数或数组??

2)两种情况下分配后的初始值是什么?

3)并参考我可以找到的关于此的内容

5 个答案:

答案 0 :(得分:10)

new-expression 的语法如下:

  1. 关键字new
  2. 可选参数,括在括号中
  3. 可选的初始化程序
  4. new int[5]中,类型为int[5],并且没有初始值设定项。因此,分配了5 int s的数组,它们未初始化,并返回指向第一个元素的指针。

    new int(5)中,类型为int,初始值设定项为(5),因此会分配一个int,并使用值5进行初始化(就像在{ {1}}),并返回指向它的指针。

答案 1 :(得分:6)

int *p = new int[5];

分配"数组"长度为5的整数。它返回一个指向5个连续内存块的开头的指针,每个内存块可以容纳int

int *p = new int(5);

分配一个指向整数的指针,该整数初始化为值5。

答案 2 :(得分:3)

在第一个实例中,它分配一个大小为5的整数数组。在这种情况下,数组中的元素是未初始化的。

在第二个实例中,它分配一个值为5的整数。

参考文献:

http://www.cplusplus.com/reference/new/operator%20new/ http://www.cplusplus.com/reference/new/operator%20new[]/

答案 3 :(得分:3)

在这里,我将逐一回答所有问题

问题1:在两种情况下我们分配什么,即整数或数组??

int *p = new int[5]; // you are allocating an array
int *p = new int(5); // you are allocating an integer

问题2:两种情况下分配后的初始值是多少?

int *p = new int[5]; // Initially there will be random value on all indexes
int *p = new int(5); // Initially value will be 5

问题3:从哪里可以找到关于此的参考?

检查以下链接

http://www.cplusplus.com/doc/tutorial/dynamic/

http://en.wikipedia.org/wiki/Initialization_%28programming%29

答案 4 :(得分:2)

方括号用于表示其元素的数组。 所以在这个声明中

int *p = new int[5];

分配了一个包含5个未初始化的整数元素的数组。与定义比较

int a[5];

在本声明中

int *p = new int(5);

分配了一个由int初始化的int类型的对象。将其与以下定义进行比较

int x = int( 5 );

或只是

int x = 5;