任何人都可以解释以下两种形式之间的区别以及每种形式的作用:
int *p = new int[5];
和
int *p = new int(5);
查询
1)我们在两种情况下分配什么,即整数或数组??
2)两种情况下分配后的初始值是什么?
3)并参考我可以找到的关于此的内容
答案 0 :(得分:10)
new-expression 的语法如下:
new
在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;