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