0

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

int * p = new int[20];

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

int arr[20];

但相反,它们都归零。到底是怎么回事?

4

2 回答 2

7

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

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

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

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

但否则不,它没有初始化。

于 2013-01-05T15:55:45.927 回答
3

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

于 2013-01-05T15:58:50.817 回答