2011-01-23 31 views
3

我想在Cint *是如何在C#中布尔?

public static void Main(string[] args) 
    { 
     unsafe 
     { 
      int i = 5; 
      int* j = &i; 
      Console.WriteLine(j); //cannot convert from 'int*' to 'bool' 
     } 

    } 

使用在C#中的指针就像我有一个关于这两个代码查询:

  1. 如何使用/编译不安全?
  2. 为什么Console.Writeline(j)正试图转换j to bool
+0

最好是将指针转换为`IntPtr`(或`int`,`uint`等)。 – leppie 2011-01-23 17:20:27

回答

11

2点)需要2步:

  • Console.WriteLine()不具有过载int*
  • 显然,它然后尝试它的第一个过载,WriteLine(bool value)并不能找到一个转换

我会称这是一个微弱的错误报告。

要打印地址,首先将其投射到ulong

3
  1. 如果使用csc,添加/不安全;或在一个vs项目中,转到项目属性,并有一个复选框
  2. 只是它找不到更好的匹配;我不得不检查规范的确切顺序规则,但只是把它当作编译器说“没有合适的匹配,我猜这是这样,但这也行不通”
2

写入值的指针是毫无意义的,它只是一个随机地址。你用堆栈中一个变量的地址来初始化指针,这样的地址不能很好地重复。你想用*运算符取消引用指针。像这样:

 Console.WriteLine(*j); 

写入指向的值,5在你的情况。