初始化指向int数组的指针

时间:2013-01-05 15:54:18

标签: c++ arrays pointers initialization int

我再一次使用C ++,并注意到在类成员方法内或main()函数内声明为指针时数组初始化的奇怪行为。

int * p = new int[20];

我期望发生的事情是,指针将保持未初始化的随机值,就像它们一样

int arr[20];

但相反,他们都归零了。发生了什么事?

2 个答案:

答案 0 :(得分:7)

即使它们为零(这是松散的,见下文),它们也没有被初始化。

实际上,你不能说它们是零,因为如果你读取这些值,就会遇到未定义的行为。您无法读取未初始化的变量。

要对数组进行值初始化,您可以执行以下操作:

int * p = new int[20]();
//                   ^^
//             note parenthesis

但不是,它没有初始化。

答案 1 :(得分:3)

p是一个指向整数的指针,并使用new[]表达式的结果进行初始化。该表达式返回动态分配的整数数组的第一个元素的地址。数组本身未初始化并包含不确定的值。如果您说过new int[100](),则数组将被初始化为零。