C# 如何使用Fixed语句打印整型变量的地址?

C# 如何使用Fixed语句打印整型变量的地址?,c#,C#,如果我这样做 int n1; unsafe { int* p1 = &n1; Console.WriteLine("p1: {0}", (int)p1); } 工作 但如果我这样做了 int n1; unsafe { fixed (int* p1 = &n1) { Console.WriteLine("p1: {0}", (int)p1); } } 编译错误:无法使用fixed

如果我这样做

int n1;
unsafe
{

   int* p1 = &n1;                
   Console.WriteLine("p1: {0}", (int)p1);
}
工作

但如果我这样做了

int n1;
unsafe
{                
  fixed (int* p1 = &n1)
  {
     Console.WriteLine("p1: {0}", (int)p1);
  }
}
编译错误:无法使用fixed语句获取已固定表达式的地址


我错在哪里?

在您的第二个代码中,您正在使用
修复

根据MSDN
不安全方法中的任何局部变量都已修复。

和固定变量的地址不能在固定表达式中使用。这就是为什么会出现此错误。

我不确定,但我想这是因为
修复了
关键字的工作原理。-它可以防止我们通过垃圾收集器在内存中移动“托管字节”(这会使指针变得无用)。我假设整数值永远不会通过GC在内存中移动,所以它不需要被修复(编译器错误是这样说的:“它是alread fixed”)。您认为两个代码样本之间的编辑会发生什么变化?