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

时间:2015-09-04 21:03:17

标签: c# unsafe unassigned-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.

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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

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

这就是为什么c#是托管语言,直到你切换到不安全模式。

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