为什么此代码编译器在获取该变量的地址时不显示错误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.
答案 0 :(得分:1)
当您在C#中处理unsafe
代码时,您基本上是在告诉编译器,不要向我发出警告,我已经知道了。所以编译器只会按照你所说的去做。
答案 1 :(得分:0)
代码完全有效,因为您没有使用未分配的变量,但是您正在使用它的指针。
最后一行是有效的,它不是使用未分配的变量而是取消引用指针。
这就是为什么c#是托管语言,直到你切换到不安全模式。
' j'可能是由调试模式引起的。