0

Use of unassigned local variable为什么在这段代码中编译器在获取该变量的地址时不显示错误?

int i;
int* p = &i; // Use of unassigned local variable i ?
int j = *p; // j = 0
j = i;      // both valid

这将编译得很好,值为j0。

4

2 回答 2

1

当你在 C# 中处理unsafe代码时,你基本上是在告诉编译器,不要警告我,我有这个。所以编译器只做你告诉它的事情。

于 2015-09-04T21:12:47.340 回答
0

该代码完全有效,因为您没有使用未分配的变量,而是使用了它的指针。

最后一行是有效的,它不是使用未分配的变量而是取消引用指针。

这就是为什么在您切换到不安全模式之前 c# 是托管语言的原因。

'j' 的零可能是由调试模式引起的。

于 2015-09-04T21:31:43.657 回答