我再次使用 C++ 并注意到当在类成员方法或main()
函数内部声明为指针时,关于数组初始化的奇怪行为。
int * p = new int[20];
我期望发生的是指针将保持未初始化的随机值,就像它们一样
int arr[20];
但相反,它们都归零。到底是怎么回事?
我再次使用 C++ 并注意到当在类成员方法或main()
函数内部声明为指针时,关于数组初始化的奇怪行为。
int * p = new int[20];
我期望发生的是指针将保持未初始化的随机值,就像它们一样
int arr[20];
但相反,它们都归零。到底是怎么回事?
即使它们为零(这很松散,见下文),它们也没有被初始化。
实际上,你不能说它们为零,因为如果你读取这些值,你会遇到未定义的行为。您无法读取未初始化的变量。
要初始化数组值,您可以执行以下操作:
int * p = new int[20]();
// ^^
// note parenthesis
但否则不,它没有初始化。
p
是一个指向整数的指针,它使用new[]
表达式的结果进行初始化。该表达式返回动态分配的整数数组的第一个元素的地址。数组本身未初始化并且包含不确定的值。如果您说过new int[100]()
,则该数组将被初始化为零。