没有“未分配的本地变量”错误?

时间:2011-05-19 06:37:47

标签: c# .net c#-3.0

为什么获取变量的地址会消除“使用未分配的局部变量”错误?

(为什么我们可以在没有初始化的情况下获取地址?)

static unsafe void Main()
{
    int x;
    int* p = &x;  //No error?!
    x += 2;       //No error?!
}

2 个答案:

答案 0 :(得分:7)

C#语言规范,第18.5.4节:

  

&运算符不要求其参数被明确赋值,但是在&运算之后,应用运算符的变量被认为是在操作的执行路径中明确赋值的。发生。在这种情况下,程序员有责任确保变量的正确初始化确实发生   ...
  & amp; quot;存在运算符,以便可以避免局部变量的冗余初始化。例如,许多外部API采用指向由API填充的结构的指针。调用此类API通常会传递本地struct变量的地址,如果没有该规则,则需要对struct变量进行冗余初始化。

答案 1 :(得分:2)

我认为因为,一旦你指向变量,编译器就无法分析是否通过该指针赋值,所以它被排除在明确的赋值分析之外。