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

问题描述:

谁能解释以下两种形式,什么之间的区别每个做:()和[]动态分配有什么区别?

int *p = new int[5]; 

int *p = new int(5); 

查询

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

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

3)和参考从哪里可以找到有关此

int *p = new int[5]; 

分配一个长度为5的整数“阵列”,它返回一个指向的5个连续存储器块的开始,其中的每一个可以持有int

int *p = new int(5); 

分配一个指向单个整数初始化为值5

一个新表达的语法如下:

  1. 关键字new
  2. 可选参数,括在括号内
  3. t YPE
  4. 可选初始化

new int[5],类型是int[5]并且没有初始化。因此,分配了一个数组5 int s,它们不被初始化,并返回指向第一个元素的指针。

new int(5),类型为int和初始化是(5),所以一个int被分配,它与值5(就像在int x(5);)初始化,并返回一个指向它的指针。

+2

“*他们不会被初始化。*” ......迂腐来说,他们实际上是默认初始化它在的情况下,内置类型意味着未初始化。 – Nawaz 2014-09-03 04:33:25

+0

@Nawaz由于与C的兼容性,这仅适用于类或方法范围之外不可访问的类型。此外,它们不是默认初始化的,而是初始化为零。 – xvdiff 2014-09-03 05:39:44

+0

@xvdiff:你错了。搜索*“默认初始化,零初始化和值初始化”*在这个网站上,你会得到很多讨论它们的话题。 – Nawaz 2014-09-03 06:13:28

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

int *p = new int[5]; 

分配有未初始化5个整数元素的数组。与定义

int a[5]; 

比较在这份声明中

int *p = new int(5); 

分配有int类型的对象,它是由5初始化。以下定义

int x = int(5); 

或简单地

int x = 5; 

在它分配大小5的整数数组在这种情况下的第一个实例相比较它的阵列中的元件是未初始化的。

在第二种情况下它分配与价值5

引用一个整数

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

在这里,我将回答一个

问题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