C++ ()和[]动态分配之间的区别是什么?
谁能解释一下以下两种形式之间的区别,以及它们各自的作用是什么C++ ()和[]动态分配之间的区别是什么?,c++,C++,谁能解释一下以下两种形式之间的区别,以及它们各自的作用是什么 int *p = new int[5]; 及 查询 1) 在这两种情况下,即整数或数组,我们分配的是什么 int *p = new int[5]; // you are allocating an array int *p = new int(5); // you are allocating an integer 2) 在这两种情况下,分配后的初始值是多少 3) 我从哪里可以找到关于这个的参考资料 int *p = new i
int *p = new int[5];
及
查询
1) 在这两种情况下,即整数或数组,我们分配的是什么
int *p = new int[5]; // you are allocating an array
int *p = new int(5); // you are allocating an integer
2) 在这两种情况下,分配后的初始值是多少
3) 我从哪里可以找到关于这个的参考资料
int *p = new int[5];
分配长度为5的整数“数组”。它返回指向5个连续内存块开头的指针,每个内存块都可以保存一个int
int *p = new int(5);
将指针分配给初始化为值5的单个整数。新表达式的语法如下所示:
new
newint[5]
中,类型为int[5]
,没有初始值设定项。因此,分配了一个由5个int
s组成的数组,它们没有初始化,并且返回了指向第一个元素的指针
在
newint(5)
中,类型是int
,初始值设定项是(5)
,因此分配一个int
,它用值5初始化(就像intx(5);
),并返回指向它的指针。方括号用于表示其元素的数组。
所以在这个声明中
int *p = new int[5];
int *p = new int(5);
分配了一个由5个未初始化的整数元素组成的数组。与定义比较
int a[5];
int x = int( 5 );
在这份声明中
int *p = new int[5];
int *p = new int(5);
分配了一个int类型的对象,该对象由5初始化。将其与以下定义进行比较
int a[5];
int x = int( 5 );
或者干脆
int x = 5;
在第一个实例中,它分配一个大小为5的整数数组。在这种情况下,数组中的元素未初始化 在第二个实例中,它分配一个值为5的整数 参考资料:
在这里,我将逐一回答所有问题 问题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:从哪里可以找到关于这个的参考资料
检查以下链接
“它们未初始化…”。。。学究般地说,它们实际上是默认初始化的,对于内置类型,这意味着未初始化。@Nawaz这仅适用于由于与C兼容而在类或方法范围之外无法访问的类型。此外,它们不是默认初始化的,而是零初始化的。@xvdiff:你错了。在这个网站上搜索“默认初始化、零初始化和值初始化”,你会得到很多讨论它们的话题。@Nawaz Welp,似乎我误解了那个。回到书本上来。