获取变量地址时使用未分配的局部变量

Use of unassigned local variable when taking the address of variable

为什么在此代码中,编译器在获取该变量的地址时不显示错误 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

这将编译正常并且 j 的值将为 0。

当你在 C# 中处理 unsafe 代码时,你基本上是在告诉编译器,不要警告我,我知道了。所以编译器只会按照你告诉它的去做。

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

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

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

'j'的零可能是debug模式造成的